我使用OleDbDataAdapter和OleDbCommandBuilder用数据库内容填充DataSet对象,然后根据我在DataSet中所做的更改来更新数据库.问题是我得到了异常:"并发冲突:UpdateCommand影响了预期的1条记录中的0条".我找到了这个错误的解释:
由于创纪录的可能它是从SELECT语句返回后已被修改,但更新之前或DELETE语句发出后,自动生成的UPDATE或DELETE语句包含一个WHERE子句,指定它是否包含所有原始一个行仅更新值并且尚未从数据源中删除.如果自动生成的更新尝试更新已删除的行或不包含DataSet中找到的原始值,则该命令不会影响任何记录,并且会引发DBConcurrencyException.
这意味着自动生成的UPDATE命令会影响数据库中的0行.我使用paradox(db-file)数据库,除了我之外没有人改变它.我猜我的程序在某处改变了同一行两次.我想通过手动执行所有生成的查询来调试我的程序,并找到哪一个不影响任何行(因为实际上我很确定所有更改只进行一次,而bug就在其他地方))).是否可以手动运行自动生成的命令?
我的代码太大而且很复杂,不能在这里发布,但通常它的工作原理是这样的(我做了一个工作项目并从那里开始)
using System;
using System.Data;
using System.Windows.Forms;
using System.Data.OleDb;
namespace OleDBCommandBuilder
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
string cs = @"Provider=Microsoft.Jet.OLEDB.4.0;";
cs += @"Data Source=C:\FOLDER\1\SPR_KMZ\;";
cs += @"Extended Properties=Paradox 5.x;";
OleDbConnection Connection = new OleDbConnection();
Connection.ConnectionString = cs;
try
{ Connection.Open(); }
catch (Exception ex)
{ MessageBox.Show("Error openning database! " + ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); Environment.Exit(0); }
string SQLQuery = "SELECT * FROM …
Run Code Online (Sandbox Code Playgroud)