首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用OleDbParamater创建查询时出现C#语法错误

使用OleDbParamater创建查询时出现C#语法错误
EN

Stack Overflow用户
提问于 2012-09-25 18:01:16
回答 3查看 727关注 0票数 2

我正在使用OleDbParameter构建一个OleDbCommand,以便将记录INSERTMS Access中。但是当我执行语句时,我得到了语法错误。如果任何人都能看到阻止查询成功执行的原因,这将是一个巨大的帮助。

这是我的代码:

代码语言:javascript
复制
string query = "INSERT INTO Customer (customerID, date, time, telephone, fax,"
    + "name, sourceAddress, destAddress, via1, via2, via3,"
    + "priority, ourReference) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";

OleDbCommand oleDbCommand = new OleDbCommand(query, oleDbConnection);

OleDbParameter customerID = new OleDbParameter();
OleDbParameter date = new OleDbParameter();
OleDbParameter time = new OleDbParameter();
OleDbParameter telephone = new OleDbParameter();
OleDbParameter fax = new OleDbParameter();
OleDbParameter name = new OleDbParameter();
OleDbParameter sourceAddress = new OleDbParameter();
OleDbParameter destAddress = new OleDbParameter();
OleDbParameter via1 = new OleDbParameter();
OleDbParameter via2 = new OleDbParameter();
OleDbParameter via3 = new OleDbParameter();
OleDbParameter priority = new OleDbParameter();
OleDbParameter ourReference = new OleDbParameter();

oleDbCommand.Parameters.Add(customerID);
oleDbCommand.Parameters.Add(date);
oleDbCommand.Parameters.Add(time);
oleDbCommand.Parameters.Add(telephone);
oleDbCommand.Parameters.Add(fax);
oleDbCommand.Parameters.Add(name);
oleDbCommand.Parameters.Add(sourceAddress);
oleDbCommand.Parameters.Add(destAddress);
oleDbCommand.Parameters.Add(via1);
oleDbCommand.Parameters.Add(via2);
oleDbCommand.Parameters.Add(via3);
oleDbCommand.Parameters.Add(priority);
oleDbCommand.Parameters.Add(ourReference);

customerID.Value = 4;
date.Value = "01/01/01";
time.Value = "01:01:01";
telephone.Value = 01010101;
fax.Value = 01010101;
name.Value = "test 4";
sourceAddress.Value = "test 4 source address";
destAddress.Value = "test 4 dest address";
via1.Value = "test 4 via 1";
via2.Value = "test 4 via 2";
via3.Value = "test 4 via 3";
priority.Value = 1;
ourReference.Value = "test 4 ref";

MessageBox.Show(oleDbCommand.CommandText.ToString());

OleDbDataAdapter oleDbDataAdapter = new OleDbDataAdapter(oleDbCommand);

oleDbCommand.CommandText = query;

oleDbConnection.Open();

oleDbCommand.ExecuteNonQuery();
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-09-25 18:11:40

字段datetimereserved words for JET/Access,所以您应该将它们封装在方括号中。(这是语法错误消息的真正来源)

代码语言:javascript
复制
"INSERT INTO Customer (customerID, [date], [time], telephone, fax, name, " + 
"sourceAddress, destAddress, via1, via2, via3," + "priority, ourReference) VALUES " + 
"(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"; 

当然,参数的数量应该匹配。(12个占位符与13个字段/参数,添加另一个占位符?),但这将给出另一条错误消息,而不是所述的语法错误

票数 3
EN

Stack Overflow用户

发布于 2012-09-25 18:08:23

你有13个参数,但只有12个?

票数 1
EN

Stack Overflow用户

发布于 2012-09-25 18:11:52

正如其他人提到的,您的参数与占位符不同步,但是,如果您的CustomerID是一个自动编号,那么您可以在sql和参数列表中省略它。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12580632

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档