这令我感到沮丧,我还没有找到合适的答案或解决方案。有很多帖子和回复,但实际上没有一个解释工作解决方案。
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对于此目的来说太重了。
谢谢!
更新
为memo字段参数切换到OleDbType.LongWChar但是一旦填充了Access记录,我仍然会得到相同的截断。
答案 0 :(得分:1)
您每http://support.microsoft.com/kb/320435
使用错误的OleDbTypeinsertCommand.Parameters.Add(“@ logicaltest”,OleDbType.Char).Value = vulnerability_configuration);
应该是
insertCommand.Parameters.Add(“@ logicaltest”,OleDbType.LongVarWChar).Value = vulnerability_configuration);
答案 1 :(得分:1)
您正在为Memo字段声明OleDbType.Char,它看起来不正确..您需要一个更大的字段来保存备注数据,请尝试OleDbType.LongVarWChar
查看此链接也会非常有帮助 OleDbType DataTypes
答案 2 :(得分:0)
由于您正在使用Memo字段的OleDbType.Char数据类型,因此截断值是正常的。对于“备注”字段,请使用OleDbType.LongVarWChar作为数据类型。如果您对其他数据类型有更多麻烦,请查看this page,它具有Acces to OleDb等效性的所有良好列表
答案 3 :(得分:0)
我已经通过将字段的文本格式更改为“Rich Text”来解决问题。