当前位置:编程学习 > C#/ASP.NET >>

事务处理的问题。

看一下我的代码,为什么数据正确也添加不了数据。总是提示如果分配给命令的连接位于本地挂起事务中,ExecuteReader要求命令拥有事务。命令的Transaction属性尚未初始化 --------------------编程问答--------------------   private void button4_Click(object sender, EventArgs e)
        {
            SqlConnection con = new SqlConnection("Data Source=localhost;Initial Catalog=s1;Integrated Security=SSPI");
            SqlDataAdapter adap = new SqlDataAdapter();
            con.Open();
            //float c = float.Parse(textBox5.Text);
            SqlCommandBuilder myCommandBuilder = new SqlCommandBuilder(adap); 
             SqlTransaction myTransaction =con.BeginTransaction();

            InitSqlDataAdapter(adap, con ,myTransaction);
            DataSet ds = new DataSet();
            adap.Fill(ds, "book");
            //MessageBox.Show(ds.Tables["book"].Rows.Count.ToString());
        
   
            try
            {

                updateDataSource(adap, ds);
                myTransaction.Commit();
            }
            catch(Exception e1)
            {
                myTransaction.Rollback();
                MessageBox.Show("error"+e1);

            }
           
            con.Close();

        }
        private void InitSqlDataAdapter(SqlDataAdapter adapter, SqlConnection conn, SqlTransaction myTrans)
        {
          
            SqlCommand cmSel = null;
            cmSel = new SqlCommand("select * from book", conn);
            adapter.SelectCommand = cmSel;

            cmSel = new SqlCommand("insert into book(编号,书名,价格)values(@id,@sm,@jg)", conn);
            cmSel.Parameters.Add("@id", SqlDbType.VarChar, 15, "编号");
            cmSel.Parameters.Add("@sm", SqlDbType.VarChar, 15, "书名");
            cmSel.Parameters.Add("@jg", SqlDbType.Money, 15, "价格");
            adapter.InsertCommand = cmSel;

            cmSel = new SqlCommand("Update book set 书名=@sm,价格=@jg where 编号=@id", conn);
            cmSel.Parameters.Add("@id", SqlDbType.VarChar, 15, "编号");
            cmSel.Parameters.Add("@sm", SqlDbType.VarChar, 15, "书名");
            cmSel.Parameters.Add("@jg", SqlDbType.Money, 15, "价格");
            adapter.UpdateCommand = cmSel;

            cmSel = new SqlCommand("delete from book where 编号=@id", conn);
            cmSel.Parameters.Add("@id", SqlDbType.VarChar, 15, "编号");
            adapter.DeleteCommand= cmSel;
            cmSel.Transaction = myTrans; 

        }
        private void  updateDataSource(SqlDataAdapter customers,DataSet decust)
        {
            

            int de=0;
            for (int i = 0; i < decust.Tables["book"].Rows.Count; i++)
            {
                DataRow dr = decust.Tables["book"].Rows[i];
                if (dr["编号"].ToString() == "002")
                {
                    dr["书名"] = "003";
                    dr["价格"] = 8.9f;
                }

                if (dr["编号"].ToString().Trim() =="001")
                {
                    de = i;
                    MessageBox.Show(dr["编号"].ToString());
                  //  decust.Tables["book"].Rows.RemoveAt(de);
                    decust.Tables["book"].Rows[de].Delete();
                }  
            }
          
            dataGridView1.DataSource = decust.Tables[0];
            DataRow ndr = decust.Tables["book"].NewRow();
            ndr["编号"] = textBox3.Text;
            ndr["书名"] = textBox4.Text;
            ndr["价格"] = decimal.Parse(textBox5.Text);
            decust.Tables["book"].Rows.Add(ndr);
            customers.Update(decust.Tables["book"]);

        } --------------------编程问答-------------------- http://tieba.koolea.com/disp.aspx?bid=200711300833314095&id=45314
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,