sqldataAdapter与Transaction一起使用的问题,特急...特急...
有点长,请大家耐心看完,帮我看看问题出在哪,transaction总是rollbackSqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["office"].ConnectionString);
string mainsql = "select * from Production_Order_Master";
SqlDataAdapter mainadapter=new SqlDataAdapter(mainsql,con);
string search = "select * from Sales_Order_Detail where Internal_Sales_Order_No=" + ViewState["no"];
SqlDataAdapter searchsda = new SqlDataAdapter(search, con);
string detailsql = "select * from Production_Order_Detail";
SqlDataAdapter detailadapter = new SqlDataAdapter(detailsql, con);
con.Open();
SqlTransaction trans = null;
try
{
trans = con.BeginTransaction();
mainadapter.SelectCommand.Transaction = trans;
mainadapter.UpdateCommand.Transaction = trans;
mainadapter.DeleteCommand.Transaction = trans;
mainadapter.InsertCommand.Transaction = trans;
mainadapter.SelectCommand = new SqlCommand(mainsql, con);
DataSet mainds = new DataSet();
mainadapter.Fill(mainds, "Production_Order_Master");
DataTable maintable = mainds.Tables["Production_Order_Master"];
DataRow maindr = maintable.NewRow();
maindr["Internal_Sales_Order_No"] = ViewState["no"];
maindr["Production_Order_Date"] = DateTime.Now;
maindr["Customer_Code"] = myGridView.SelectedRow.Cells[1].Text;
maindr["Customer_Name"] = myGridView.SelectedRow.Cells[2].Text;
maindr["Customer_Order_No"] = myGridView.SelectedRow.Cells[3].Text;
maindr["Customer_Rep_Code"] = myGridView.SelectedRow.Cells[4].Text;
maindr["User_Name"] = myGridView.SelectedRow.Cells[5].Text;
maindr["Remark"] = myGridView.SelectedRow.Cells[7].Text;
maindr["Order_Status"] = 0;
maindr["Create_Date"] = DateTime.Now;
maindr["Last_Modify_Date"] = DateTime.Now;
maindr["approved"] = 0;
maintable.Rows.Add(maindr);
mainadapter.InsertCommand = new SqlCommand("insert into Production_Order_Master(Internal_Sales_Order_No,Production_Order_Date,Customer_Code,Customer_Name,Customer_Order_No,Customer_Rep_Code,User_Name,Remark,Order_Status,Create_Date,Last_Modify_Date,approved)" +
"Values('" + maindr["Internal_Sales_Order_No"] + "','" + maindr["Production_Order_Date"] + "','" + maindr["Customer_Code"] + "','" + maindr["Customer_Name"] + "','" + maindr["Customer_Order_No"] + "','" +
maindr["Customer_Rep_Code"] + "','" + maindr["User_Name"] + "','" + maindr["Remark"] + "','" + maindr["Order_Status"] + "','" + maindr["Create_Date"] + "','" + maindr["Last_Modify_Date"] + "','" + maindr["approved"] + "')", con);
mainadapter.Update(mainds, "Production_Order_Master");
string str = "Select Top 1 Production_Order_No from Production_Order_Master Order By Production_Order_No Desc";
SqlCommand cmd = new SqlCommand(str, con);
int max = (int)cmd.ExecuteScalar();
DataSet searchds = new DataSet();
searchsda.Fill(searchds, "Sales_Order_Detail");
DataTable searchdt = searchds.Tables["Sales_Order_Detail"];
detailadapter.UpdateCommand.Transaction = trans;
detailadapter.DeleteCommand.Transaction = trans;
detailadapter.InsertCommand.Transaction = trans;
detailadapter.SelectCommand = new SqlCommand(detailsql, con);
DataSet detailds = new DataSet();
detailadapter.Fill(detailds, "Production_Order_Detail");
DataTable detaildt = detailds.Tables["Production_Order_Detail"];
foreach (DataRow searchdr in searchdt.Rows)
{
DataRow detaildr = detaildt.NewRow();
detaildr["Production_Order_No"] = max;
detaildr["Production_Order_Serial"] = searchdr["Internal_Sales_Order_Serial"];
detaildr["Internal_Item_No"] = searchdr["Internal_Item_No"];
detaildr["Customer_Item_No"] = searchdr["Customer_Item_No"];
detaildr["Customer_Item_Name"] = searchdr["Customer_Item_Name"];
detaildr["Internal_Item_Name"] = searchdr["Internal_Item_Name"];
detaildr["Production_Order_Qty"] = searchdr["Order_Qty"];
detaildr["Produced_Qty"] = 0;
detaildr["Unit"] = searchdr["Unit"];
detaildr["Request_Date"] = searchdr["Shipment_Request_Date"];
detaildr["Order_Status"] = 0;
detaildr["Remark"] = searchdr["Remark"];
detaildt.Rows.Add(detaildr);
detailadapter.InsertCommand = new SqlCommand("insert into Production_Order_Detail Values('" + detaildr["Production_Order_No"] + "','" + detaildr["Production_Order_Serial"] + "','" + detaildr["Internal_Item_No"] + "','" +
detaildr["Customer_Item_No"] + "','" + detaildr["Customer_Item_Name"] + "','" + detaildr["Internal_Item_Name"] + "'," + detaildr["Production_Order_Qty"] + "," + detaildr["Produced_Qty"] + ",'" + detaildr["Unit"] + "','" + detaildr["Request_Date"] + "','" + detaildr["Order_Status"] + "','" + detaildr["Remark"] + "')", con);
}
detailadapter.Update(detailds, "Production_Order_Detail");
trans.Commit();
}
catch
{
if (trans != null && null != trans.Connection)
{
trans.Rollback();
Response.Write("更新失败!!");
}
}
finally
{
con.Close();
}
--------------------编程问答-------------------- con.Open();
放到SqlConnection后面去试试.
哎 整这么多代码鬼知道是怎么会事啊,自己仔细调试下不就找到在那出问题了.
--------------------编程问答-------------------- 看来还是要自己打断点调试 --------------------编程问答-------------------- 你要把错误信息发出来,
补充:.NET技术 , ASP.NET