[英]How do I insert a new record into an Access Database with an autonumber field using OleDb in C#
[英]C# INSERT into an Access DB Memo type field is truncated when using OLEDB 12.0
這令我感到沮喪,我還沒有找到合適的答案或解決方案。 有很多帖子和回復,但沒有一個真正解釋一個有效的解決方案。
Access漏洞配置表包括:
Field Name Data Type
cveid Test
logicaltest Memo
完全空的漏洞配置表填充完全唯一數據的相關代碼位:
mycon = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + accessDb + ";Persist Security Info=False");
mycon.Open();
...
insertCommand = new OleDbCommand("INSERT INTO vulnerableconfiguration (cveid, logicaltest) VALUES (@cveid, @logicaltest);", mycon);
insertCommand.Parameters.Add("@cveid", OleDbType.Char).Value = cve_id);
insertCommand.Parameters.Add("@logicaltest", OleDbType.LongWChar).Value = vulnerable_configuration);
insertCommand.ExecuteNonQuery();
邏輯測試字段值被截斷,我不知道為什么。 即使第一條記錄也從780個字符截斷到370個! 所有備忘錄字段都應符合備忘錄大小限制。 沒有錯誤。 我已經調試了它,並且insertCommand Parameters中設置的值具有完整值,但是當執行該命令時,Access DB具有截斷值。
如果有人有任何想法,那么對於遇到這個問題的每個人來說都會很棒。
請不要將我轉介到http://allenbrowne.com/ser-63.html ,這些案例都不涉及這個直接的Access插入案例。 此外,Access 2007/2010沒有Memo數據類型的最大長度設置,它應該會增長。
為什么我使用Access? 這是用於Access DB的導入工具,用於查找目的。 其他人可以編寫一些簡單的查詢和報告來獲取他們想要的信息。 不被用作后端,而MSSQL對於此目的而言太重了。
謝謝!
UPDATE
切換到OleDbType.LongWChar以獲取memo字段參數,但是一旦填充了Access記錄,我仍然會得到相同的截斷。
您每個http://support.microsoft.com/kb/320435使用錯誤的OleDbType
insertCommand.Parameters.Add(“@ logicaltest”,OleDbType.Char).Value = vulnerability_configuration);
應該
insertCommand.Parameters.Add(“@ logicaltest”,OleDbType.LongVarWChar).Value = vulnerability_configuration);
您正在為Memo字段聲明OleDbType.Char錯誤地看起來像..您需要一個更大的字段來保存備注數據,請嘗試OleDbType.LongVarWChar
看看這個鏈接也是非常有用的OleDbType DataTypes
由於您在備注字段中使用OleDbType.Char數據類型,因此將值截斷是正常的。 對於“備注”字段,請使用OleDbType.LongVarWChar作為數據類型。 如果你對其他數據類型有更多的麻煩,看看這個頁面 ,它有一個很好的Acces to OleDb的等價列表
看看這個鏈接: http : //social.msdn.microsoft.com/Forums/en-US/csharpgeneral/thread/4ee6d674-5942-494e-8d7b-9c6f377d0ab6/
我已經通過將字段的文本格式更改為“Rich Text”來解決問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.