日期:2014-05-18  浏览次数:20907 次

急求!sqlserver中关于事物问题
先有2张表A,B 我需要先在A中插入一条数据,然后取出刚插入的数据在数据库生产的主键,再将这个主键插入到B表中。
这样的事物要如何进行呢,我疑惑的是如何把从A中取出的主键作为参数插入到B中
C# code

   string sql = @" Insert into A(A1,A2) values(@A1,@A2);
                   select @@IDENTITY AS 'Identity';
                   Insert into B(B1,B2,B3) values(@B1,@B2,@B3)";
            SqlConnection conn = new SqlConnection(CONNECT_STRING);
            SqlTransaction tran = null;
            SqlCommand cmd = new SqlCommand();
            cmd.Connection = conn;
            cmd.CommandType = CommandType.Text;
            try
            {
                conn.Open();
                tran = conn.BeginTransaction();
                cmd.Transaction = tran;
                cmd.Parameters.Clear();
                cmd.Parameters.AddWithValue("@A1", A1);
                ...
                cmd.CommandText = sql;
                cmd.ExecuteNonQuery();
                tran.Commit();
                return true;
            }
            catch (Exception ex)
            {
                if (tran != null)
                {
                    tran.Rollback();
                }
                return false;
            }
            finally
            {
                conn.Close();
                cmd.Dispose();
            }



在cmd.Parameters.AddWithValue这里如何写呢....

------解决方案--------------------
你这几条语句是一起被发过去执行的,全部执行完才会返回,所以你应该还不能把id传给B表,你不如写个存储过程吧,或者分步执行sql
------解决方案--------------------
假设A1 是自增主键
C# code
string sql = "insert into a(a2) values('a');" +
                    "declare @id int;" +
                    "select @id=@@IDENTITY;" +
                    "insert into b(b1,b2,b3) values(@id,'b2','b3');";