存储过程成功执行,但更改未保存到数据库

时间:2011-05-17 11:22:58

标签: c# wcf sql-server-2008-r2

我有以下通过WCF服务(C#.NET)调用的存储过程。

该过程成功执行(我使用配置文件跟踪),问题是更改未保存到数据库。我google了很多,但我找不到解决这个问题的方法......

   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

用于调用sp的C#代码如下:

    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 个答案:

答案 0 :(得分:4)

我猜测cmd.Transaction = trans会分配一个永不投降的交易。