我有一个多语句 SQL 查询,它发生在 SqlTransaction 中,如下所示:
string sName = "";
string sNumber = "";
string sFirstName = "";
string sqlQuery1 = @"INSERT INTO myTable(Name, Number) VALUES (@_Name, @_Number)";
string sqlQuery2 = @"INSERT INTO myOtherTable( ID, FirstName) VALUES ( @_ID, @_First )";
SqlConnection conn = new SqlConn(***);
conn.Open();
SqlTransaction transaction;
SqlCommand command1 = new SqlCommand(sqlQuery1, conn, transaction);
SqlCommand command2 = new SqlCommand(sqlQuery2, conn, transaction);
command1.Parameters.Add("@_Name", SqlDbType.NVarChar, 255).Value = sName;
command1.Parameters.Add("@_Number", SqlDbType.NVarChar, 255).Value = sNumber;
int? returnedID = (int?)command1.ExecuteScalar();
command2.Parameters.Add("@_ID", SqlDbType.Int).Value = (int)returnedID; <--- Error
command2.Parameters.Add("@_First", SqlDbType.NVarChar, 255).Value = sFirstName;
command2.ExecuteNonQuery();
transaction.Commit();
在我标记为错误的行中,我在执行过程中收到一个错误,提示“参数化查询需要未提供的参数 @_ID。
现在,假设我在将代码简化为这个示例时没有拼写错误,为什么我在返回的 ID 中收到一个空值以表示正确执行的语句?当我在查询中单独运行该语句时,我没有收到任何错误并且它返回成功。为什么在这个事务中运行它时为空?谢谢!
编辑:我故意放弃了 try{} 捕获,因为它与我的问题无关。否则,我只是忘记了插入查询中需要的 IDENTITY_SCOPE(),否则将没有返回值。