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

sqldataAdapter与Transaction一起使用的问题,特急...特急...

 有点长,请大家耐心看完,帮我看看问题出在哪,transaction总是rollback

        SqlConnection 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
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,