使用 Oledb 对象插入 ms-access 查询获取无效查询异常
Posted
技术标签:
【中文标题】使用 Oledb 对象插入 ms-access 查询获取无效查询异常【英文标题】:Insert query for ms-access with Oledb object getting exception of not a valid query 【发布时间】:2011-09-15 06:59:49 【问题描述】:我正在使用以下代码,它给出了无效的插入命令异常。
row要添加到数据库的DataRow对象,conn是OleDBConnection对象。
OleDbCommand cmd = new OleDbCommand();
cmd.Connection = conn;
cmd.CommandText = `"Insert Into Appointments(ID,Body,End,Location,Start,Subject,Properties)"
+ "Values(@ID,@Body,@End,@Location,@Start,@Subject,@Properties)";
cmd.Parameters.Add("@ID", OleDbType.WChar).Value = row[0].ToString();
cmd.Parameters.Add("@Body", OleDbType.WChar).Value = row[1].ToString();
cmd.Parameters.Add("@End", OleDbType.Date).Value = Convert.ToDateTime(row[2]).Date.ToLongDateString();
cmd.Parameters.Add("@Location", OleDbType.WChar).Value = row[3].ToString();
cmd.Parameters.Add("@Start", OleDbType.Date).Value = Convert.ToDateTime(row[4]).Date.ToLongDateString();
cmd.Parameters.Add("@Subject", OleDbType.WChar).Value = row[5].ToString();
cmd.Parameters.Add("@Properties", OleDbType.WChar).Value = row[6].ToString();
conn.Open();
cmd.ExecuteNonQuery(); //At this line exception is generating
conn.Close();
请帮帮我。
【问题讨论】:
发布完整的错误信息 "INSERT INTO 语句中的语法错误。" 【参考方案1】:您的表的字段名称中有一个(可能更多)reserved word。
字段名称End ...至少。
试试
cmd.CommandText = `"Insert Into Appointments(ID,Body,[End],Location,Start,Subject,Properties)"
+ "Values(@ID,@Body,@End,@Location,@Start,@Subject,@Properties)";
【讨论】:
【参考方案2】:“约会”表是否支持插入 ID?如果 ID 列是标识值,则可能会导致问题。
【讨论】:
ID 是主键,它是文本类型,但它可能不会产生问题,因为它来自与数据库具有相同架构的数据集。【参考方案3】:我认为您用于参数的数据类型不正确。
如果您的 ID 列是数字列,则不应使用 OleDbType.WChar
,而应使用 OleDbType.Integer
,例如
对于字母数字列,我也不会使用OleDbType.WChar
,而是使用OleDbtype.VarChar
。
参见OleDbType 枚举。
【讨论】:
以上是关于使用 Oledb 对象插入 ms-access 查询获取无效查询异常的主要内容,如果未能解决你的问题,请参考以下文章
使用 c# 和 oledb 查询更新 Ms-Access 2010 中的列值
Microsoft.ACE.OLEDB.12.0 提供程序未注册