【问题标题】:Access SQL syntax error when using OleDbCommandBuilder使用 OleDbCommandBuilder 时访问 SQL 语法错误
【发布时间】:2013-11-02 16:30:00
【问题描述】:

我将在 C# 中使用 OleDbDataAdapter 在 Access 数据库中插入数据,但我收到一条错误消息 INSERT INTO 命令中的语法错误

BackgroundWorker worker = new BackgroundWorker();
OleDbDataAdapter dbAdapter new OleDbDataAdapter();
OleDbConnection dbConnection = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=E:\\PMS.mdb");
worker = new BackgroundWorker();
worker.WorkerReportsProgress = true;
worker.DoWork += InsertJob;
worker.ProgressChanged += InsertJobCompleted;
worker.RunWorkerAsync(args);

而InsertJob函数是:

private void InsertJob(object sender, DoWorkEventArgs e)
{
     var args = (InsertJobArgs)e.Argument;
     try
        {
            dbAdapter.SelectCommand = new OleDbCommand("SELECT * FROM Sheet", dbConnection);                
            dbAdapter.Fill(args.DataTable);
            var builder = new OleDbCommandBuilder(dbAdapter);
            var row = args.DataTable.NewRow();

            row["UserName"] = args.Entry.UserName;
            row["Password"] = args.Entry.Password;
            args.DataTable.Rows.Add(row);

            dbAdapter.InsertCommand = builder.GetInsertCommand();               
            dbAdapter.Update(args.DataTable);
            builder.Dispose();
        }
        catch (Exception ex)
        {
            args.Exception = ex;
            worker.ReportProgress(0, args);
            return;
        }
        worker.ReportProgress(100, args);
}

我在线收到错误消息:dbAdapter.Update(args.DataTable);

我尝试用visual studio调试,发现所有InsertCommand参数值都是null

我尝试在调用dbAdapter.Update(args.DataTable);之前通过此代码手动插入它

dbAdapter.InsertCommand.Parameters[0].Value = args.Entry.UserName;
dbAdapter.InsertCommand.Parameters[1].Value = args.Entry.Password;

【问题讨论】:

    标签: c# ms-access oledb


    【解决方案1】:

    试试这个:

    紧跟在该行之后

    var builder = new OleDbCommandBuilder(dbAdapter);
    

    添加两行

    builder.QuotePrefix = "[";
    builder.QuoteSuffix = "]";
    

    这将告诉OleDbCommandBuilder 将表名和列名包含在方括号中,从而生成类似的 INSERT 命令

    INSERT INTO [TableName] ...
    

    而不是默认形式

    INSERT INTO TableName ...
    

    如果任何表或列名包含空格或“有趣”字符,或者它们恰好是 Access SQL 中的保留字,则需要使用方括号。 (在你的情况下,我怀疑你的表有一个名为 [Password] 的列,PASSWORD 是 Access SQL 中的保留字。)

    【讨论】:

      猜你喜欢
      • 2013-01-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-01
      • 2015-03-23
      • 2019-08-08
      • 2023-03-30
      相关资源
      最近更新 更多