Я думаю, что это может помочь вам:
CREATE PROCEDURE DEPT_COUNT
(
@DEPT_NAME VARCHAR(20), -- Input parameter
@D_COUNT INT OUTPUT -- Output parameter
-- Remember parameters begin with "@"
)
AS -- You miss this word in your example
BEGIN
SELECT COUNT(*)
INTO #D_COUNT -- Into a Temp Table (prefix "#")
FROM INSTRUCTOR
WHERE INSTRUCTOR.DEPT_NAME = DEPT_COUNT.DEPT_NAME
END
Затем вы можете позвонить SP следующим образом, например:
DECLARE @COUNTER INT
EXEC DEPT_COUNT 'DeptName', @COUNTER OUTPUT
SELECT @COUNTER
Это исключение ThreadAbortException
; это специальное исключение, которое автоматически повторно генерируется в конце каждого блока catch, если вы не вызываете Thread.ResetAbort ()
.
методы ASP .Net, такие как Response.End
или Response.Redirect
(если вы не передаете false
) генерирует это исключение, чтобы завершить обработку текущей страницы; ваш someFunctionCall ()
, вероятно, вызывает один из этих методов.
ASP .Net сам обрабатывает это исключение и вызывает ResetAbort
для продолжения обработки.
Попробуйте так :
Это мой метод расширения :
public static void WriteJSONObject(this HttpResponse response, object content) {
response.ContentType = "application/json";
response.Write(new JavaScriptSerializer().Serialize(content));
response.End();
}
И логика :
public void RegisterUser() {
try {
Response.WriteJSONObject(new { Result = "See hello" });
}
catch (Exception err) {
if (err.Message != "Thread was being aborted.")
Response.WriteJSONObject(new { Result = err.Message });
else {
Response.End();
}
}
}