簡體   English   中英

C#INSERT到Access DB備注類型字段在使用OLEDB 12.0時被截斷

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM