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

logicaltest 字段值被截断,我不知道为什么。连第一条记录也从 780 个字符截断到 370 个字符!所有备忘录字段都应符合备忘录大小限制。没有错误。我已经对其进行了调试,insertCommand 参数中设置的值具有完整值,但是在执行命令时,Access DB 具有截断值。

如果有人有任何想法,那对遇到这个问题的每个人来说都会很棒。

请不要让我参考http://allenbrowne.com/ser-63.html,这些案例都没有处理这种直接的 Access 插入案例。此外,Access 2007/2010 没有备忘录数据类型的最大长度设置,它应该会增长。

为什么我使用 Access?这是用于 Access DB 的导入工具,用于查找目的。其他人可以编写一些简单的查询和报告以从中获取他们想要的信息。不被用作后端,而且 MSSQL 对于这个目的来说太重了。

谢谢!

更新

为备忘录字段参数切换到 OleDbType.LongWChar 但填充 Access 记录后我仍然会得到相同的截断。

4

4 回答 4

1

根据http://support.microsoft.com/kb/320435,您使用了错误的 OleDbType

insertCommand.Parameters.Add("@logicaltest", OleDbType.Char).Value = exploit_configuration);

应该

insertCommand.Parameters.Add("@logicaltest", OleDbType.LongVarWChar).Value = exploit_configuration);

于 2012-05-31T17:51:35.027 回答
1

您错误地为 Memo 字段声明 OleDbType.Char

查看此链接也会非常有帮助 OleDbType DataTypes

于 2012-05-31T17:54:19.600 回答
0

由于您对备注字段使用 OleDbType.Char 数据类型,因此将值截断是正常的。对于备注字段,使用 OleDbType.LongVarWChar 作为数据类型。如果您对其他数据类型有更多问题,请查看此页面,它提供了访问 OleDb 的所有等价列表

于 2012-05-31T17:53:08.243 回答
0

看看这个链接: http ://social.msdn.microsoft.com/Forums/en-US/csharpgeneral/thread/4ee6d674-5942-494e-8d7b-9c6f377d0ab6/

我通过将字段的文本格式更改为“富文本”解决了这个问题。

于 2012-10-10T13:46:48.137 回答