我的存储过程在我的SQL EXEC查询中正常工作。它插入到我的数据库中,但是当我从C#调用它时它不会抛出错误。发生了什么。
我的C#代码:
con.Open();
transaction = con.BeginTransaction();
cmd = new SqlCommand("InsertIndent", con, transaction);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@IP_No", SqlDbType.VarChar, 15);
cmd.Parameters["@IP_No"].Value = indent.IP_No;
cmd.Parameters.Add("@Stat", SqlDbType.VarChar, 1);
cmd.Parameters["@Stat"].Value = indent.Status;
cmd.Parameters.Add("@Reference_No", SqlDbType.VarChar, 15);
cmd.Parameters["@Reference_No"].Value = indent.Reference_No;
cmd.Parameters.Add("@Remarks", SqlDbType.VarChar, 30);
cmd.Parameters["@Remarks"].Value = indent.Remarks;
cmd.Parameters.Add("@Update_Time", SqlDbType.DateTime);
cmd.Parameters["@Update_Time"].Value = indent.Update_Time;
cmd.Parameters.Add("@User_Id", SqlDbType.VarChar, 15);
cmd.Parameters["@User_Id"].Value = indent.User_Id;
cmd.Parameters.Add("@Log_Id", SqlDbType.BigInt);
cmd.Parameters["@Log_Id"].Value = indent.Log_Id;
cmd.Parameters.Add("@Shift_Id", SqlDbType.Int);
cmd.Parameters["@Shift_Id"].Value = indent.Shift_Id;
result = cmd.ExecuteNonQuery().ToString();
log.Debug("connection.cs : inside addNewIndent,for IpNo " + indent.IP_No);
con.Close();
追踪时的价值观
我的存储过程:
[InsertIndent]
(
@IP_No varchar(15),
@Stat varchar(1),
@Reference_No varchar(15),
@Remarks varchar(30),
@Update_Time DATETIME,
@User_Id varchar(15),
@Log_Id bigint,
@Shift_Id int
)
AS
BEGIN
DECLARE @Indent_No varchar(20)
set @Indent_No= (SELECT TOP 1 In_Id from Id_Generation WITH(NOLOCK))
INSERT INTO IP_Indent(IP_No,Indent_No,Status,Reference_No,Remarks,User_Id,Log_Id,Shift_Id,Update_Time)
VALUES(@IP_No,@Indent_No,@Stat,@Reference_No,@Remarks,@User_Id,@Log_Id,@Shift_Id,@Update_Time)
Update Id_Generation set In_Id=In_Id+1;
END
答案 0 :(得分:3)
由于您已启动了一项交易,因此在关闭连接之前您还需要commit it,否则更改将被回滚。
另一方面,为什么不为该Id_Generation
计数器列使用IDENTITY?就目前情况而言,如果两个并发呼叫者呼叫您的触发器,他们可能会使用相同的Id_Generation
值。
另请注意,SqlConnection
和SqlCommand
都是Disposable
- 例如将它们包装在using
语句中将确保尽快释放资源。