iSeries データベースに依存する VB.Net で作成されたアプリで問題が発生しています。ユーザーはメモを保存できます。これは (非常に) 頻繁にメールボックスからコピー/貼り付けされます。
しかし、多くのメールには、データがデータベースに保存されるときに iDb2ConversionException をトリガーする無効な文字が含まれています。
とりあえず、データをスクラブして、無効な文字を一致する html エンティティに置き換えますが、そのアプローチは本当に嫌いです。
- 変換リストを維持する必要があり、無効な文字のほとんどをカバーできたにもかかわらず、新しい文字が常に出てきます。
- Client Access で STRSQL を使用して同じコマンドを実行すると、これらの無効な文字を実際に挿入できます。
- 多くの固定長フィールドがあり、文字を HTML エンティティに置き換えると、UI レベルで文字列の最大長を強制することがはるかに難しくなります
パラメーターを使用しない場合、同じコマンドが ADO.NET で機能します (ただし、ユーザー入力をもう一度スクラブする必要があるため、全体として、問題を別の場所に移動するだけです)。
Dim command = connection.CreateCommand()
command.CommandText = "UPDATE table SET field = '€€€€€]]]]]]]]]]]°°°°°°§§§§§' where ...."
command.ExecuteNonQuery() ' Executes successfully '
Dim command = connection.CreateCommand()
command.CommandText = "UPDATE table SET field = @value where ...."
command.DeriveParameters()
command.Parameters("@value").Value = "'€€€€€]]]]]]]]]]]°°°°°°§§§§§'"
command.ExecuteNonQuery() ' Throws iDb2ConversionException '
私の接続文字列は次のとおりです。
Datasource=server;DataBase=DBNAME;DefaultCollection=DBCOLLECTION;HexParserOption=Binary;LibraryList=LIBRARIES;Naming=SQL;DataCompression=True;AllowUnsupportedChar=true;
その例外を取得せずにこれらの文字をDBに正常に書き込むためのオプションはありますか?