2012-07-01 75 views
1

奇怪的异常尝试使用参数将数据插入Access数据库时出现奇怪的错误。在那里我得到一个问题的路线是: -使用OLEDB参数插入

   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中手动插入值时,一切正常,因此它必须与参数属性有关。

+0

没有与插入三个字符没有问题,但是,参数必须以正确的顺序列出。在你的例子中,你只显示一个参数,其他人是否按照它们出现在命令文本中的顺序排列? – Fionnuala

+0

名字被插入到数据库中,只是试图插入到描述字段中,我得到一个异常 –

+0

我运行了我在下面发布的示例代码,它对我有用。我看不出为什么你不能插入到描述中,除非其中一个参数出现故障。 – Fionnuala

回答

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"); 

保留字

+0

名称被保留字没有问题(名称是一个保留字),但指出参数必须按顺序添加(在我原来的问题的评论)所以最好的答案。 –

+0

+1对于@Remou ..:D – BizApps

1

也许你需要在Description中加上大括号。 [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(); 

问候

+0

描述不是[Jet](http://support.microsoft.com/kb/248738)或[ACE]中的保留字(http://msdn.microsoft.com/zh-cn/library/bb208875(v = office.12).aspx),但名称是。我想你应该修改那个答案。 – Fionnuala

+0

谢谢我已经更新了我的帖子..:D – BizApps