小编pla*_*ont的帖子

获取OleDbCommandBuilder生成的SQL命令

我使用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)

c# oledb dbase

5
推荐指数
1
解决办法
614
查看次数

标签 统计

c# ×1

dbase ×1

oledb ×1