我有以下通过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!));
}
我缺少什么?
提前感谢十亿人
答案 0 :(得分:4)
我猜测cmd.Transaction = trans
会分配一个永不投降的交易。