Существующее соединение было принудительно закрыто удаленным хостом - PullRequest
1 голос
/ 21 июля 2010

Пожалуйста, помогите мне с этим:

Этот код работает нормально, за исключением случаев, когда элемент управления переходит в блок IF «НЕ СУЩЕСТВУЕТ», тогда любой запрос, выполняемый после выполнения этого блока, принудительно закрывает соединение sql, хотя это результат этого блока кода верны. Я не могу запустить другие запросы после его запуска.

IF(@Mode='Get')
BEGIN
    IF(@Field='manager')
    BEGIN
        DECLARE @UserUserName NVARCHAR(250)
        DECLARE @UserID AS VARCHAR(50)
        SELECT @UserUserName=CAST(Value AS NVARCHAR(250)) FROM dbo.UserProperties WHERE [Key]=@Key AND Field='manager'
        IF(NOT EXISTS(SELECT * FROM dbo.Users WHERE UserUsername=@UserUserName) OR @UserUserName IS NULL )
        BEGIN
            SELECT  @UserID = dbo.fnGetManagerId(CAST(@Key AS INT)) -- numeric
            SELECT @UserUserName=UserUsername FROM dbo.Users WHERE UserID=@UserID
        END 
        SELECT UserName AS Value FROM users WHERE UserUsername=@UserUserName
    END 
    ELSE
    BEGIN
        SELECT Value FROM dbo.UserProperties WHERE [Key]=@Key AND Field=@Field
    END 
END

Ответы [ 2 ]

2 голосов
/ 21 июля 2010

Кажется, я помню, что видел статьи из kb об ошибках со скалярными UDF в SQL2000, которые могли вызвать нарушения прав доступа. Сначала я отделю приведение от списка параметров UDF и сделаю это в другой строке

Заменить

SELECT  @UserID = dbo.fnGetManagerId(CAST(@Key AS INT)) -- numeric

С

DECLARE @K int
SET @K = CAST(@Key AS INT)
SELECT  @UserID = dbo.fnGetManagerId(@K)

затем, если проблема не устранена, закомментируйте строку за раз, пока не найдете виновного.

Я бы посмотрел в журналах ошибок SQL Server. Также вы можете использовать SQL Profiler для отслеживания сообщений об ошибках пользователя. Достаточно высокая ошибка серьезности закрывает соединение автоматически.

1 голос
/ 21 июля 2010

Я считаю, что ваше утверждение ЕСЛИ неверно. Попробуйте:

IF NOT (EXISTS(SELECT * FROM dbo.Users WHERE UserUsername=@UserUserName) OR @UserUserName IS NULL )
...