在 C# 中使用 DataTables 更新 SQL 中的 Table

Updating Table in SQL using DataTables in C#

我正在尝试更新现有 SQL 数据库中的 Table,同时我正在使用 DataTables、DataAdapter 和 SqlCommandBuilder。

这是我的 Update/Synch 方法:

   public bool synchSqlData(DataTable UpdateTable)
            {
                bool success = false;
                SqlDataAdapter da = new SqlDataAdapter();
                using (SqlCommandBuilder cmb = new SqlCommandBuilder(da))
                {
                    da.UpdateCommand = cmb.GetUpdateCommand();
                    try
                    {
                        da.Update(UpdateTable);
                        success = true;
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show("Error has occured!" + ex.Message);
                    }
                }
                return success;
            }

这是我的 Button_Click 活动:

private void btnSynchDB1_Click(object sender, EventArgs e)
        {
            tbl1.Merge(tblCmp);
            if (success = sql1.synchSqlData(tbl1))
                MessageBox.Show("Synchronisieren von DB1 erfolgreich!");
        }

我正在合并两个数据 Table,然后想将其更新到我的 SQL 数据库。 sql1 包含一个 SQL 连接。

我的 SQL 数据库根本没有进行任何更改。 我missing/doing哪里错了?

编辑

好的,现在我编辑了我的 DataAdapter,使用动态 Select 命令初始化,当我调试它时,我在我的 CommandBuilder 构建的 DataAdapter 中看到插入、删除和更新命令。仍然没有对我的数据库进行任何更改。这是为什么?

public bool synchSqlData(DataTable UpdateTable, DataTable MergeTable, string selectedTableName, SqlConnection sqlCon)
    {
        bool success = false;
        SqlCommand sqlCom = new SqlCommand("SELECT * FROM dbo." + selectedTableName, sqlCon);
        SqlDataAdapter da = new SqlDataAdapter(sqlCom);
        SqlCommandBuilder cmb = new SqlCommandBuilder(da);

        da.InsertCommand = cmb.GetInsertCommand();
        da.DeleteCommand = cmb.GetDeleteCommand();
        da.UpdateCommand = cmb.GetUpdateCommand();

        UpdateTable.Merge(MergeTable);

        try
        {
            da.Update(UpdateTable);
            success = true;
        }
        catch (Exception ex)
        {
            MessageBox.Show("Error has occured!" + ex.Message);
            success = false;
        }
        return success;
    }

问题出在 Merge 方法上。

要么调用:
foreach (DataRow dr in MergeTable.Rows) { dr.SetAdded(); }
在调用 .Merge

之前

或者像这样调用 .Merge:
UpdateTable.Merge(MergeTable, false);

这样 .Update 方法将正确识别更改的行和 Insert/Delete/Update。