using (SqlConnection conn = new SqlConnection())
{
conn.ConnectionString = System.Web.Configuration.WebConfigurationManager.ConnectionStrings["DatabaseConnectionString"].ConnectionString; SqlCommand cmdA = new SqlCommand();
SqlCommand cmdB = new SqlCommand(); cmdA.Connection = conn;
cmdB.Connection = conn; cmdA.CommandText = "insert into PhoneBook(bookName) values(@bookName);select SCOPE_IDENTITY()";
cmdA.Parameters.AddWithValue("bookName", "xyz");
if (conn.State != ConnectionState.Open)
conn.Open(); SqlTransaction trans = conn.BeginTransaction(); cmdA.Transaction = trans;
cmdB.Transaction = trans;
try
{
int id = Convert.ToInt32(cmdA.ExecuteScalar()); //虽然只是ExecuteScalar(),但它是执行insert操作的!然后返回SCOPE_IDENTITY() cmdB.CommandText = "insert into Users(bookId, UserName) values(@bookId, @UserName)";
cmdB.Parameters.AddWithValue("bookId", id);
cmdB.Parameters.AddWithValue("UserName", "user1"); cmdB.ExecuteNonQuery(); cmdB.Parameters.Clear(); cmdB.Parameters.AddWithValue("bookId", id);
cmdB.Parameters.AddWithValue("UserName", "user2"); cmdB.ExecuteNonQuery(); trans.Commit(); }
catch
{
trans.Rollback(); }
}
关键是:cmdA.CommandText = "insert into PhoneBook(bookName) values(@bookName);select SCOPE_IDENTITY()";
注意这里由二个SQL语句组成。
而且下面仅仅是int id = Convert.ToInt32(cmdA.ExecuteScalar()); 并没有ExecuteNonQuery(),但它还是会执行插入操作的。
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货