已回答 使用单个数据表更新多个SQL数据库表

安德鲁·马努亚

知名会员
已加入
2019年5月30日
留言内容
75
编程经验
Beginner
你好,

我得到了在Form_Load事件中生成的数据表。然后,数据将填充到dataGridView中。

允许用户向dataGridView列(issueQuantity)添加值,并且在保存数据时,我想更新SQL Server中的两个表。

但是,当我运行该程序时,它将仅更新第一个表,而不更新另一个表。

请在此找到我的代码。

C#:
SqlConnection connect = Connection.GetConnection();
            table.AcceptChanges();
            //Mark selected rows ready for insert
            foreach (DataRow row in table.Rows)
            {
                if (row["Select Item"] as bool? == true)
                {
                    row.SetAdded();                   
                }
            }

            //Save Data to Destination

            using (var command = new SqlCommand(@"UPDATE tbl_CostCentreDrugStock SET tbl_CostCentreDrugStock.availableQuantity += @aissueQuantity
                                                            FROM tbl_CostCentreDrugStock
                                                            INNER JOIN tbl_CostCentreOrderStatus
                                                            ON tbl_CostCentreDrugStock.costCentreID = tbl_CostCentreOrderStatus.costCentreID
                                                            WHERE tbl_CostCentreOrderStatus.ccOrderID [email protected] AND tbl_CostCentreDrugStock.drugID [email protected]", connect))

             using (var adapter = new SqlDataAdapter { InsertCommand = command })
            {               
                command.Parameters.Add("@adrugID", SqlDbType.Int, 0, "drugID");
                command.Parameters.Add("@accOrderID", SqlDbType.Int, 0, "ccOrderID");
                command.Parameters.Add("@aissueQuantity", SqlDbType.Int, 0, "issueQuantity");

                try
                {
                    adapter.Update(table);
                    MessageBox.Show("Data Saved");
                }
                catch (Exception ee)
                {
                    MessageBox.Show(ee.Message);
                }
                command.Parameters.Clear();
            }

            
            using (var command = new SqlCommand(@"UPDATE tbl_DrugQuantity SET availableQuantity -= @aissueQuantity
                                                            WHERE drugID = @adrugID", connect))

            using (var adapter = new SqlDataAdapter { InsertCommand = command })
            {               
                command.Parameters.Add("@adrugID", SqlDbType.Int, 0, "drugID");
                command.Parameters.Add("@aissueQuantity", SqlDbType.Int, 0, "issueQuantity");

                try
                {
                    adapter.Update(table);
                    MessageBox.Show("Data Saved");
                }
                catch (Exception ee)
                {
                    MessageBox.Show(ee.Message);
                }
                command.Parameters.Clear();             
            }

感谢您提供有关如何完成此任务的反馈。

亲切的问候,

安德鲁
 

金西尼

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
3,566
地点
悉尼,澳大利亚
编程经验
10+
这是因为,默认情况下, 更新 方法隐式调用 接受变更 在保存的每一行上,这意味着在第一行之后没有要保存的更改 更新 称呼。您需要设置 接受变更OnUpdate 第一个数据适配器的属性 错误的 为了保留第二个数据适配器的更改。
 

安德鲁·马努亚

知名会员
已加入
2019年5月30日
留言内容
75
编程经验
Beginner
嗨,jmcilhinney,

感谢您的快速回复。
我确实添加了 接受更新期间的更改 属性为假,但预期结果没有变化。
请在下面参考我的代码;
C#:
SqlConnection connect = Connection.GetConnection();
            table.AcceptChanges();
            //Mark selected rows ready for insert
            foreach (DataRow row in table.Rows)
            {
                if (row["Select Item"] as bool? == true)
                {
                    row.SetAdded();                   
                }
            }

            //Save Data to Destination

          
            using (var command = new SqlCommand(@"UPDATE tbl_CostCentreDrugStock SET tbl_CostCentreDrugStock.availableQuantity += @aissueQuantity
                                                            FROM tbl_CostCentreDrugStock
                                                            INNER JOIN tbl_CostCentreOrderStatus
                                                            ON tbl_CostCentreDrugStock.costCentreID = tbl_CostCentreOrderStatus.costCentreID
                                                            WHERE tbl_CostCentreOrderStatus.ccOrderID [email protected] AND tbl_CostCentreDrugStock.drugID [email protected]", connect))
              
                                                            
            using (var adapter = new SqlDataAdapter { InsertCommand = command })
            {               
                command.Parameters.Add("@adrugID", SqlDbType.Int, 0, "drugID");
                command.Parameters.Add("@accOrderID", SqlDbType.Int, 0, "ccOrderID");
                command.Parameters.Add("@aissueQuantity", SqlDbType.Int, 0, "issueQuantity");
                  
                try
                {
                    adapter.接受更新期间的更改 = false;
                    adapter.Update(table);
                  
                    MessageBox.Show("Data Saved");
                }
                catch (Exception ee)
                {
                    MessageBox.Show(ee.Message);
                }
                command.Parameters.Clear();
            }

            
            using (var command = new SqlCommand(@"UPDATE tbl_DrugQuantity SET availableQuantity -= @aissueQuantity
                                                            WHERE drugID = @adrugID", connect))

            using (var adapter = new SqlDataAdapter { InsertCommand = command })
            {               
                command.Parameters.Add("@adrugID", SqlDbType.Int, 0, "drugID");
                command.Parameters.Add("@aissueQuantity", SqlDbType.Int, 0, "issueQuantity");

               try
                {
                     adapter.Update(table);
                    
                    MessageBox.Show("Data Saved");
                }
                catch (Exception ee)
                {
                    MessageBox.Show(ee.Message);
                }
                command.Parameters.Clear();             
            }

感谢您的宝贵反馈。希望我已经根据您上面指定的内容完成了操作。

亲切的问候,

安德鲁
 

安德鲁·马努亚

知名会员
已加入
2019年5月30日
留言内容
75
编程经验
Beginner
这是因为,默认情况下, 更新 方法隐式调用 接受变更 在保存的每一行上,这意味着在第一行之后没有要保存的更改 更新 称呼。您需要设置 接受变更OnUpdate 第一个数据适配器的属性 错误的为了保留第二个数据适配器的更改。

嗨,jmcilhinney,

非常感谢您的指导。
最后,能够解决使用问题"adapter.AcceptCHangesDuringUpdate"属性,正确。

亲切的问候,
安德鲁
 
Last edited:
最佳 底部