使用 SqlDataAdapter 更新 SQL Server 数据库

Posted

技术标签:

【中文标题】使用 SqlDataAdapter 更新 SQL Server 数据库【英文标题】:Updating SQL Server database with SqlDataAdapter 【发布时间】:2013-11-14 14:41:51 【问题描述】:

我有一个带有新条目的 DataTable,我想将这些添加到现有数据库中。

所以我创建了一个SqlDataAdapter 并用它填充第二个表,然后我合并两个表并更新数据库,但没有任何反应,返回值为 0,数据库保持不变。

这是我的代码:

DBManager.DBDestinationConnect(textBox10.Text, textBox9.Text, textBox8.Text, textBox7.Text, ref destinationConnection);
//DBManager is a Class, to connect with the database
CategoryAdapterBackup = new SqlDataAdapter("SELECT*FROM " + tablename, destinationConnection);

CategoryTableBackup = new DataTable();
CategoryAdapterBackup.Fill(CategoryTableBackup);
CategoryTableBackup.Merge(SubTable);

//SubTable is the DataTable with the new entries
CategoryAdapterBackup.Update(CategoryTableBackup);

【问题讨论】:

【参考方案1】:

我无法识别您使用此代码的意图。为什么不简单地在 SubTable 上使用 sqlbulkcopy?这会将 SubTable 的内容附加到目标 SQL 表中。如果您害怕重复,则将 SubTable Table 的内容插入到数据库中的 Temp 中,并可能使用 Join 将行插入到目标表中目标表中不存在行的行中。

【讨论】:

sqlbulkcopy 是要走的路。我只是合并了 2 个表并将差异写入另一个表。这样我就可以使用 sqlbulkcopy 而不重复,也无需在数据库中使用 Temp。【参考方案2】:

尝试使用CategoryAdapterBackup.Flush()DBManager.Flush() 另外,将SELECT*FROM 替换为SELECT * FROM(带空格)可能是个好主意

【讨论】:

SqlDataAdapter 没有 Flush 的定义,DBManager 也没有 on,因为它是我的 on 类,只包含两个函数来连接不同的数据库

以上是关于使用 SqlDataAdapter 更新 SQL Server 数据库的主要内容,如果未能解决你的问题,请参考以下文章

SqlDataAdapter 更新不起作用

SqlDataAdapter 如何在内部工作?

关于DataSet事务处理以及SqlDataAdapter四种用法

SqlDataAdapter.update() 不更新数据库

如何在 SQLDataAdapter 中使用更新语句

C# SqlDataAdapter.Update()