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(),但它还是会执行插入操作的。