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 フィールドの値が切り捨てられており、その理由がわかりません。1st レコードも 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 = weak_configuration);

する必要があります

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

于 2012-05-31T17:51:35.027 に答える
1

Memo フィールドの OleDbType.Char を誤って宣言しています..Memo データを保持するには、より大きなフィールドが必要です。OleDbType.LongVarWChar を試してください

このリンクを見ると、非常に役立ち ます

于 2012-05-31T17:54:19.600 に答える
0

このリンクを見てください: http://social.msdn.microsoft.com/Forums/en-US/csharpgeneral/thread/4ee6d674-5942-494e-8d7b-9c6f377d0ab6/

フィールドのテキスト形式を「リッチテキスト」に変更することで問題を解決しました。

于 2012-10-10T13:46:48.137 に答える
0

メモ フィールドに OleDbType.Char データ型を使用しているため、値が切り捨てられるのは正常です。Memo フィールドでは、データ型に OleDbType.LongVarWChar を使用します。他のデータ型でさらに問題がある場合は、このページをご覧ください。Access to OleDb と同等の優れたリストがすべて含まれています。

于 2012-05-31T17:53:08.243 に答える