我要在 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;
尝试这个:
紧接该行之后
var builder = new OleDbCommandBuilder(dbAdapter);
添加两行
builder.QuotePrefix = "[";
builder.QuoteSuffix = "]";
这将告诉OleDbCommandBuilder
将表名和列名括在方括号中,生成如下 INSERT 命令
INSERT INTO [TableName] ...
而不是默认的形式
INSERT INTO TableName ...
如果任何表名或列名包含空格或“有趣”字符,或者它们碰巧是 Access SQL 中的保留字,则需要使用方括号。 (就你而言,我怀疑你的表有一个名为 [Password] 的列,并且PASSWORD
是 Access SQL 中的保留字。)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)