2012-07-01 111 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