Хранимая процедура выполняется успешно, но изменения не сохраняются в базе данных

#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 назначает транзакцию, которая никогда не выполняется.