在 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。
我正在尝试更新现有 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。