SQL Server:SqlBulkCopy 导入导致主键违规
我正在尝试在 C#.NET 中设计一个基于窗口的应用程序。我正在数据网格视图中读取 csv 文件,然后将这些数据插入数据库。我正在使用 SqlBulkCopy 将 csv 文件中的数据插入数据库。我担心的是,当我尝试将数据插入数据库(已经包含数据)时,我收到主键约束错误。我想知道是否可以在使用 SqlBulkCopy
插入数据库之前比较值。如果数据库中存在值,则应该进行更新。
任何人都可以为我提供逻辑。
谢谢。
I am trying to design a window based application in C#.NET. I am reading csv file in data grid view and then insert those data into database. I am using SqlBulkCopy
to insert data from csv file into database. My concern is, when I am trying to insert data into database (which already consist data) I am getting error of primary key constraint. I want to know whether it is possible to compare value before inserting into database using SqlBulkCopy
. If value exist in database it should do update.
Can anyone provide me logic for this.
Thanks.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
如果您真的非常知道不需要这些欺骗,只需在 PK 索引上设置“忽略欺骗”选项即可。
If you really, really know that the dupes aren't needed, just set the "Ignore Dupes" option on the index for the PK and you're done.
您需要首先将数据库中的数据读入列表中。
然后,当您加载 csv 时,您会丢弃所有重复项。
另外,当您插入时,您可能应该忽略主键并让 sql 数据库生成键。
You need to read the data from the database into a list first.
Then when you load the csv you discard any duplicates.
Also, when you insert you should possibly ignore the primary key and let the sql database generate the key.
当您通过 SQLBulkCopy 传送数据时,无法执行任何逻辑。甚至触发器(颤抖)也被关闭。
您应该做的是将数据批量复制到空的临时表中,然后运行一个存储过程,将临时表中的数据合并到真实的非空表中。
如果您使用的是 SQL 2008,则可以使用 MERGE 命令,否则您只需通过单独的更新和插入来围绕它进行编码。
There's no way to do any logic when you're firehosing data in via SQLBulkCopy. Even triggers (shudder) are turned off.
What you should do is bulkcopy your data into an empty staging table, then run a stored procedure that merges the data from the staging table into the real, non-empty table.
If you're using SQL 2008, then you can use the
MERGE
command, otherwise you'll just have to code around it with a separate update and insert.