事务处理的问题。
看一下我的代码,为什么数据正确也添加不了数据。总是提示如果分配给命令的连接位于本地挂起事务中,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#