使用 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 提供程序未注册

经典 ASP 和 ms-access:插入数据的问题

有经验的 DBA 应该使用哪种 C# 操作 ms-access 的方法?

将日期插入 Ms-Access 数据库的问题

使用 c# 在 32 位和 64 位窗口中打开 ms-access .mdb