使用 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 数据库的主要内容,如果未能解决你的问题,请参考以下文章
关于DataSet事务处理以及SqlDataAdapter四种用法