代码如下
        private void button8_Click(object sender, EventArgs e)
        {
            SqlConnection cn = new SqlConnection("Data Source=SERVER05;Initial Catalog=ICCO;Persist Security Info=True;User ID=sa;Pwd=2008");
            cn.Open();
            SqlTransaction trans = cn.BeginTransaction(IsolationLevel.ReadCommitted);
            try
            {
                string sql = "INSERT INTO X_foster(foster_name,foster_date,foster_post,foster_stipend,foster_content,foster_circs,foster_result,foster_labour,degree,factory,community,exuberance ) VALUES(@name,@date,@post,@stipend,@content,@circs,@result,@labour,@pic1,@pic2,@pic3,@pic4)";
                SqlCommand cmd = new SqlCommand(sql, cn);
              //cn.Open();
                cmd.Parameters.Add("@name", SqlDbType.Char).Value = TextName.Text.Trim();//姓名foster_name
                cmd.Parameters.Add("@date", SqlDbType.DateTime).Value = dateTimePicker1.Text.Trim();//日期foster_date
                cmd.Parameters.Add("@post", SqlDbType.Char).Value = TextGW.Text.Trim();//岗位foster_post
                cmd.Parameters.Add("@labour", SqlDbType.Char).Value = textID.Text.Trim();//工号foster_labour
                cmd.Parameters.Add("@stipend", SqlDbType.Char).Value = TextXZ.Text.Trim();//薪资foster_stipend
                cmd.Parameters.Add("@content", SqlDbType.Char).Value = TextNR.Text.Trim();//内容foster_content
                cmd.Parameters.Add("@circs", SqlDbType.Char).Value = TextQK.Text.Trim();//情况foster_circs
                cmd.Parameters.Add("@result", SqlDbType.Char).Value = TextJG.Text.Trim();//结果foster_result                MemoryStream ms1 = new MemoryStream();
                byte[] degree;
                this.pictureBox1.Image.Save(ms1, System.Drawing.Imaging.ImageFormat.Bmp);
                degree = new byte[ms1.Length];
                ms1.Position = 0;
                ms1.Read(degree, 0, Convert.ToInt32(ms1.Length));                MemoryStream ms2 = new MemoryStream();
                byte[] factory;
                this.pictureBox2.Image.Save(ms2, System.Drawing.Imaging.ImageFormat.Bmp);
                factory = new byte[ms2.Length];
                ms2.Position = 0;
                ms2.Read(factory, 0, Convert.ToInt32(ms2.Length));                MemoryStream ms3 = new MemoryStream();
                byte[] community;
                this.pictureBox2.Image.Save(ms3, System.Drawing.Imaging.ImageFormat.Bmp);
                community = new byte[ms2.Length];
                ms3.Position = 0;
                ms3.Read(community, 0, Convert.ToInt32(ms2.Length));                MemoryStream ms4 = new MemoryStream();
                byte[] exuberance;
                this.pictureBox4.Image.Save(ms4, System.Drawing.Imaging.ImageFormat.Bmp);
                exuberance = new byte[ms2.Length];
                ms4.Position = 0;
                ms4.Read(exuberance, 0, Convert.ToInt32(ms4.Length));                cmd.Parameters.Add("@pic1", SqlDbType.Image).Value = degree;
                cmd.Parameters.Add("@pic2", SqlDbType.Image).Value = factory;
                cmd.Parameters.Add("@pic2", SqlDbType.Image).Value = community;
                cmd.Parameters.Add("@pic2", SqlDbType.Image).Value = exuberance;
               
                cmd.ExecuteNonQuery();                SqlCommand cmd1 = new SqlCommand("DELETE FROM X_foster WHERE foster_name='" + this.textID.Text + "'", cn);
  
                cmd1.ExecuteNonQuery();
               
                trans.Commit();
            }
            catch (Exception ex)
            {
                trans.Rollback();
                trans = cn.BeginTransaction();
                Console.WriteLine(ex.Message);
                MessageBox.Show("更新失败!请确认数据的正确性!", "更新提示!", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
            finally
            {
                cn.Close();
            }
       
        }
出现错误显示这个{"如果分配给命令的连接位于本地挂起事务中,ExecuteNonQuery 要求命令拥有事务。命令的 Transaction 属性尚未初始化。"} System.Exception {System.InvalidOperationException}
有没有人教教

解决方案 »

  1.   


    using (SqlConnection conn = new SqlConnection("server=(local);database=TallyMoney;user id=sa;password=sa;"))
       {
        conn.Open();//连接数据库
        SqlTransaction transaction;//开始一个本地事务
        transaction = conn.BeginTransaction("MyTransaction");//必须为SqlCommand指定数据库连接和登记的事务
        //或transaction = conn.BeginTransaction();
        SqlCommand cmd = new SqlCommand("", conn, transaction);
        try
        {//向数据表中插入记录的命令语句
         cmd.CommandText = @"insert into aa (datestr,reinfo) values ('"+TextBox1.Text+"','"+TextBox2.Text+"')";
         cmd.ExecuteNonQuery();
         cmd.CommandText = @"insert into bb (aa_id,name) values ('"+TextBox3.Text+"','"+TextBox4.Text+"')";
         cmd.ExecuteNonQuery();
         transaction.Commit();//提交事务
         Response.Write("操作完成");
        }
        catch (Exception ex)
        {
         Response.Write("提交错误类型:"+ex.GetType());
         Response.Write("提交错误信息:"+ex.Message);
         try
         {
          transaction.Rollback();//回滚事务
         }
         catch (Exception ex2)
         {
          Response.Write("回滚错误类型:"+ex2.GetType());
          Response.Write("回滚错误信息:"+ex2.Message);
         }
        }
       }
      

  2.   

     SqlCommand cmd = new SqlCommand(sql, cn);
    没有为Cmd设置事务对象
      

  3.   

    SqlCommand cmd = new SqlCommand(sql, cn);
    cmd.Transaction = trans;
      

  4.   


    SqlCommand cmd = new SqlCommand(sql, cn);
    改正一下
    SqlCommand cmd = new SqlCommand(sql, cn ,transaction);其它修改同上