#c# #wcf #sql-server-2008-r2
#c# #wcf #sql-server-2008-r2
Вопрос:
У меня есть следующая хранимая процедура, которую я вызываю через службу WCF (C#.NET ).
Процедура выполняется успешно (я отслеживал с помощью profile), проблема в том, что изменения не сохраняются в базе данных. Я много гуглил, но не смог найти решение этой проблемы…
ALTER PROCEDURE [dbo].[sp_create_x]
(
@X VarChar(10), @Y VarChar(2), @Z DateTime,
@A VarChar(10), @B DateTime, @C Int)
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
-- Insert statements for procedure here
IF NOT EXISTS (SELECT x FROM tblTable WHERE x = @X)
BEGIN
INSERT INTO
tblTable (x, y, z, a, b, c)
VALUES (@X, @Y, @Z, @A, @B, @C)
END
END
RETURN @@ERROR
Код C #, который используется для вызова sp, выглядит следующим образом:
SqlConnection conn = new SqlConnection(myConnectionString);
SqlCommand cmd = new SqlCommand("sp_create_x", conn);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Clear();
cmd.Parameters.Add("@X", SqlDbType.VarChar).Value = "somevalue";
cmd.Parameters.Add("@Y", SqlDbType.VarChar).Value = "somevalue";
cmd.Parameters.Add("@Z", SqlDbType.DateTime).Value = DateTime.Now;
cmd.Parameters.Add("@A", SqlDbType.VarChar).Value = "somevalue";
cmd.Parameters.Add("@B", SqlDbType.DateTime).Value = DateTime.Now;
cmd.Parameters.Add("@C", SqlDbType.Int).Value = 1;
cmd.Parameters.Add("@RETURN", SqlDbType.Int).Direction = ParameterDirection.ReturnValue;
cmd.Transaction = trans;
cmd.ExecuteNonQuery();
int errCode = (int)cmd.Parameters["@RETURN"].Value;
conn.Close();
if (errCode != 0)
{
throw new Exception(string.Format("Error!));
}
Чего я не понимаю???
Заранее огромное спасибо
Комментарии:
1. когда совершается
cmd.Transaction = trans;
транзакция?2. Боже, большое спасибо, иногда человек становится слепым!!! Спасибо, что открыли мне глаза, как я могу пометить ваш комментарий как ответ?
Ответ №1:
Я предполагаю, что cmd.Transaction = trans
назначает транзакцию, которая никогда не выполняется.