Добрый день, у меня возникла проблема.
Из свого ASP.NET приложения я вызываю хранимую процедуру для обновления статуса сообщения следующим образом.
UpdateMessageStatus("Closed");
Где внутри UpdateMessageStatus выполняется
SqlCommand cmd = new SqlCommand("spMessageStatusUpdate", sqlConn);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@MessageID", MessageID);
((SqlParameter)cmd.Parameters.Add("@Status", SqlDbType.VarChar, 20)).Value = status;
cmd.ExecuteNonQuery();
После выполнения этого запроса по SQL Profiler видно, что на сервер пошел запрос
exec spMessageStatusUpdate @MessageID = 3, @Status = 'Closed'
НО при этом статус сообщения не обновился.
Если же этот самый запрос скопировать в Query Analyzer, то статус обновляется.
Собственно сама процедура
ALTER PROCEDURE dbo.spMessageStatusUpdate
@MessageID int,
@Status varchar (20)
AS
BEGIN
DECLARE @StatusID int
SELECT @StatusID = S.StatusID From Status S
WHERE S.[Name]= @Status
UPDATE Message SET StatusID = @StatusID
WHERE
Message.MessageID = @MessageID
END
Опытным путем было выявлено, что не происходит выборка
SELECT @StatusID = S.StatusID From Status S
WHERE S.[Name]= @Status
Объясните, с чем это может быть связано? Пробовал различные варианты сравнения (LIKE, через RTRIM, добавлял COLLATE, через nvarchar) — нчиего не помогает. Из приложения не выполняется, из Query Analyzer работает.
Здравствуйте, sYgiL, Вы писали:
YL>Добрый день, у меня возникла проблема.
YL>После выполнения этого запроса по SQL Profiler видно, что на сервер пошел запрос YL>exec spMessageStatusUpdate @MessageID = 3, @Status = 'Closed' YL>НО при этом статус сообщения не обновился. YL>Если же этот самый запрос скопировать в Query Analyzer, то статус обновляется.
Как проверяете, что "статус сообщения не обновился". Есть ли в профайлере команды управления транзакциями?
Здравствуйте, pkarklin, Вы писали:
P>Здравствуйте, sYgiL, Вы писали:
YL>>Добрый день, у меня возникла проблема.
YL>>После выполнения этого запроса по SQL Profiler видно, что на сервер пошел запрос YL>>exec spMessageStatusUpdate @MessageID = 3, @Status = 'Closed' YL>>НО при этом статус сообщения не обновился. YL>>Если же этот самый запрос скопировать в Query Analyzer, то статус обновляется.
P>Как проверяете, что "статус сообщения не обновился". Есть ли в профайлере команды управления транзакциями?
Проверяю обычным просмотром таблицы Message, где StatusID по прежнему равен 1, вместо положенных 3.
Насчет профайлера не совсем понял.
Я просто мониторю в нем, какой запрос посылается на сервер.
Здравствуйте, sYgiL, Вы писали:
YL>Здравствуйте, pkarklin, Вы писали:
P>>Здравствуйте, sYgiL, Вы писали:
YL>>>Добрый день, у меня возникла проблема.
YL>>>После выполнения этого запроса по SQL Profiler видно, что на сервер пошел запрос YL>>>exec spMessageStatusUpdate @MessageID = 3, @Status = 'Closed' YL>>>НО при этом статус сообщения не обновился. YL>>>Если же этот самый запрос скопировать в Query Analyzer, то статус обновляется.
P>>Как проверяете, что "статус сообщения не обновился". Есть ли в профайлере команды управления транзакциями? YL>Проверяю обычным просмотром таблицы Message, где StatusID по прежнему равен 1, вместо положенных 3. YL>Насчет профайлера не совсем понял. YL>Я просто мониторю в нем, какой запрос посылается на сервер.
Я иммел ввиду, что может Вы транзакциями управляете и не закрываете ее.
Здравствуйте, pkarklin, Вы писали:
P>Я иммел ввиду, что может Вы транзакциями управляете и не закрываете ее.
Точно.. закрыл профайлер и все сразу заработало. спасибо.
Здравствуйте, sYgiL, Вы писали:
YL>Здравствуйте, pkarklin, Вы писали:
P>>Я иммел ввиду, что может Вы транзакциями управляете и не закрываете ее. YL>Точно.. закрыл профайлер и все сразу заработало. спасибо.
С этого момента можно по-подробнее. Коим боком профайлер мешал?!