OLEDB 参数插入的奇怪异常
Posted
技术标签:
【中文标题】OLEDB 参数插入的奇怪异常【英文标题】:Weird exception with OLEDB Parameter Insert 【发布时间】:2012-07-01 23:51:07 【问题描述】:尝试使用参数将数据插入 Access 数据库时出现奇怪的错误。我遇到问题的地方是:-
thisCommand.CommandText = "INSERT INTO Events (Venue_ID, Date_Start, Date_End, Time_Start, Time_End, Name, Description, Event_Type, Buy_Tickets_URL) VALUES (@VenID, @DStart, @DEnd, @evTime, @evTime, @Name, @Des, @EvType, @SysUrl);";
//Other Parameters already inserted here
string desc = GetDesc(rec.EvName);
thisCommand.Parameters.AddWithValue("@Des", desc);
thisCommand.ExecuteNonQuery();
其他参数都不会导致问题,但是当尝试将数据插入描述字段时,我收到一个数据库异常,指出该字段太小而无法接受数据量。问题是我的程序在抛出错误时只尝试插入 3 个字符,并且描述字段是一个备忘录,因此应该能够容纳 65000 多个字符。在 CommandText 中手动插入值时,一切正常,因此它必须与参数属性有关。
【问题讨论】:
插入三个字符是没有问题的,但是参数必须按正确的顺序列出。您在示例中只显示了一个参数,其他参数是否按照您的命令文本中出现的顺序排列? 名称被很好地插入到数据库中,只有尝试插入到描述字段中才会出现异常 我运行了我在下面发布的示例代码,它对我有用。我不明白为什么你不能插入到描述中,除非其中一个参数有问题。 刚看到订单有点不对劲,没想到要按订单设置参数 谢谢! 参数名称无关紧要,在您拥有的场景中不与 MS Access 一起使用,您可以轻松使用 ?作为@VenID。重要的是顺序。 【参考方案1】:参数名称只是给你一个指导,例如,这个运行,注意所有参数都具有相同的名称!另请注意,保留字 Name 由方括号转义。
thisCommand.CommandText = "INSERT INTO Events (Venue_ID, Date_Start, " +
"Date_End, [Name], Description, Event_Type, Buy_Tickets_URL) " +
"VALUES (@VenID, @DStart, @DEnd, @Name, @Des, @EvType, @SysUrl);";
thisCommand.Parameters.AddWithValue("@Des", 1);
thisCommand.Parameters.AddWithValue("@Des", DateTime.Now.Date);
thisCommand.Parameters.AddWithValue("@Des", DateTime.Now.Date);
thisCommand.Parameters.AddWithValue("@Des", "abc");
thisCommand.Parameters.AddWithValue("@Des", "abc");
thisCommand.Parameters.AddWithValue("@Des", 1);
thisCommand.Parameters.AddWithValue("@Des", "abc");
保留字
Jet ACE【讨论】:
Name 是保留字没有问题(Names 是保留字),但指出必须按顺序添加参数(在我原来的问题上的 cmets 中)所以最好的答案。【参考方案2】:也许您需要在描述中添加大括号。 [Description]
并更改您的参数,例如:
thisCommand.CommandText = "INSERT INTO Events (Venue_ID, Date_Start, Date_End, Time_Start, Time_End, Name, [Description], Event_Type, Buy_Tickets_URL) VALUES (@VenID, @DStart, @DEnd, @evTime, @evTime, @Name, @Des, @EvType, @SysUrl);
//Other Parameters already inserted here
string desc = GetDesc(rec.EvName);
// thisCommand.Parameters.AddWithValue("@Des", desc);
thisCommand.Parameters.Add("@Des", OleDbType.VarChar, 6000).Value = desc;
thisCommand.ExecuteNonQuery();
问候
【讨论】:
描述不是Jet 或ACE 中的保留字,但名称是。我认为您应该修改该答案。以上是关于OLEDB 参数插入的奇怪异常的主要内容,如果未能解决你的问题,请参考以下文章
ASP.NET 3.5 C# 网站中的 Oledb 溢出错误
MS Access 2013 从 VBA 调用插入查询并出现奇怪的错误