.net、MS Access、INSERT INTO 语句中的语法错误
.net, MS Access, Syntax error in INSERT INTO statement
异常详细信息:System.Data.OleDb.OleDbException:INSERT INTO 语句中存在语法错误。
来源错误:
第 168 行:comm.Parameters.Add(参数);
第 169 行:
第 170 行:int totalCount = comm.ExecuteNonQuery();
第 171 行:conn.Close();
第 172 行:
当代码 运行 使用以下方法时,我不断收到错误消息 "Syntax error in INSERT INTO statement":
protected void makeOrder()
{
OleDbConnection conn = new OleDbConnection();
conn.ConnectionString = ConfigurationManager.ConnectionStrings["onlineStoreConnString"].ConnectionString;
conn.Open();
OleDbCommand comm = conn.CreateCommand();
comm.CommandText = "INSERT INTO Order (UserID, ProductID, OrderDate, ProductQty, IsCart) VALUES(?, ?, ?, ?, ?)";
OleDbParameter param;
param = comm.CreateParameter();
param.DbType = DbType.String;
param.Direction = ParameterDirection.Input;
param.Value = Int32.Parse(Session["LoggedInId"].ToString());
comm.Parameters.Add(param);
param = comm.CreateParameter();
param.DbType = DbType.String;
param.Direction = ParameterDirection.Input;
param.Value = Int32.Parse(Request.QueryString["id"].ToString());
comm.Parameters.Add(param);
param = comm.CreateParameter();
param.DbType = DbType.String;
param.Direction = ParameterDirection.Input;
param.Value = DateTime.Now.ToString();
comm.Parameters.Add(param);
param = comm.CreateParameter();
param.DbType = DbType.String;
param.Direction = ParameterDirection.Input;
param.Value = Int32.Parse(txtQty.Text);
comm.Parameters.Add(param);
param = comm.CreateParameter();
param.DbType = DbType.String;
param.Direction = ParameterDirection.Input;
param.Value = true;
comm.Parameters.Add(param);
int totalCount = comm.ExecuteNonQuery();
conn.Close();
}
数据库是MS Access,属性的数据类型是
用户 ID:数字,
ProductID:数量,
订单日期:长文本,
产品数量:数量
IsCart:Yes/No
我已经在这个错误中纠缠了几个小时,有谁能帮我找到它吗?谢谢
Order
很可能 是数据库引擎中的保留字,因为它是 SQL 查询中的关键字。您需要将标识符括起来,以防止它们被误认为是关键字。根据您的数据库引擎,它可能是这样的:
INSERT INTO [Order] (UserID, ProductID, OrderDate, ProductQty, IsCart) VALUES(?, ?, ?, ?, ?)
或者这个:
INSERT INTO `Order` (UserID, ProductID, OrderDate, ProductQty, IsCart) VALUES(?, ?, ?, ?, ?)
或者甚至是其他东西(同样,取决于您的数据库)。
出于各种原因,从技术上讲,您可以(甚至可能想要)附上所有标识符:
INSERT INTO [Order] ([UserID], [ProductID], [OrderDate], [ProductQty], [IsCart]) VALUES(?, ?, ?, ?, ?)
这可能是为了一致性,为了防止进一步的歧义(不太可能,但可能),或者甚至是为了在查询解析中实现非常轻微的性能改进(这对于大批量情况来说可能很重要)。
异常详细信息:System.Data.OleDb.OleDbException:INSERT INTO 语句中存在语法错误。
来源错误:
第 168 行:comm.Parameters.Add(参数);
第 169 行:
第 170 行:int totalCount = comm.ExecuteNonQuery();
第 171 行:conn.Close();
第 172 行:
当代码 运行 使用以下方法时,我不断收到错误消息 "Syntax error in INSERT INTO statement":
protected void makeOrder()
{
OleDbConnection conn = new OleDbConnection();
conn.ConnectionString = ConfigurationManager.ConnectionStrings["onlineStoreConnString"].ConnectionString;
conn.Open();
OleDbCommand comm = conn.CreateCommand();
comm.CommandText = "INSERT INTO Order (UserID, ProductID, OrderDate, ProductQty, IsCart) VALUES(?, ?, ?, ?, ?)";
OleDbParameter param;
param = comm.CreateParameter();
param.DbType = DbType.String;
param.Direction = ParameterDirection.Input;
param.Value = Int32.Parse(Session["LoggedInId"].ToString());
comm.Parameters.Add(param);
param = comm.CreateParameter();
param.DbType = DbType.String;
param.Direction = ParameterDirection.Input;
param.Value = Int32.Parse(Request.QueryString["id"].ToString());
comm.Parameters.Add(param);
param = comm.CreateParameter();
param.DbType = DbType.String;
param.Direction = ParameterDirection.Input;
param.Value = DateTime.Now.ToString();
comm.Parameters.Add(param);
param = comm.CreateParameter();
param.DbType = DbType.String;
param.Direction = ParameterDirection.Input;
param.Value = Int32.Parse(txtQty.Text);
comm.Parameters.Add(param);
param = comm.CreateParameter();
param.DbType = DbType.String;
param.Direction = ParameterDirection.Input;
param.Value = true;
comm.Parameters.Add(param);
int totalCount = comm.ExecuteNonQuery();
conn.Close();
}
数据库是MS Access,属性的数据类型是 用户 ID:数字,
ProductID:数量,
订单日期:长文本,
产品数量:数量
IsCart:Yes/No
我已经在这个错误中纠缠了几个小时,有谁能帮我找到它吗?谢谢
Order
很可能 是数据库引擎中的保留字,因为它是 SQL 查询中的关键字。您需要将标识符括起来,以防止它们被误认为是关键字。根据您的数据库引擎,它可能是这样的:
INSERT INTO [Order] (UserID, ProductID, OrderDate, ProductQty, IsCart) VALUES(?, ?, ?, ?, ?)
或者这个:
INSERT INTO `Order` (UserID, ProductID, OrderDate, ProductQty, IsCart) VALUES(?, ?, ?, ?, ?)
或者甚至是其他东西(同样,取决于您的数据库)。
出于各种原因,从技术上讲,您可以(甚至可能想要)附上所有标识符:
INSERT INTO [Order] ([UserID], [ProductID], [OrderDate], [ProductQty], [IsCart]) VALUES(?, ?, ?, ?, ?)
这可能是为了一致性,为了防止进一步的歧义(不太可能,但可能),或者甚至是为了在查询解析中实现非常轻微的性能改进(这对于大批量情况来说可能很重要)。