3

DataGridViewに表形式のデータ(Oracle Server DBに対するSQLクエリの結果)を表示できるWindowsフォームGUIをC#で作成しました。フィールドの1つはXMLであり、潜在的に非常に大きく、CLOB(私が正しい場合はCharacter Large OBject)として格納されます。もちろん、ユーザーはセルを直接見るのではなく、セルをダブルクリックして、ファイルがきれいに印刷されていることを確認します。問題は、ファイル(CLOB)を.NET文字列に変換する必要があることです。変換しないと、例外が生成されます。回避策として、Oracle to_charプロシージャを使用しようとしましたが、4000文字に制限されています。だから私はこのようなファイルの部分文字列を取ります:

 select to_char(dbms_lob.substr(column_name, 4000, 1 ))

問題は、4000文字を超える場合、ファイル全体が表示されないことです。この制限を回避するにはどうすればよいですか?

4

2 に答える 2

3

CLOBまたは結果の文字列をDataGridViewに格納しないでください。

代わりに、DataGridViewでクリックイベントをキャプチャしてから、CLOBを表示用の文字列に変換します。から適切なエンコーディングを使用しますSystem.Text.Encoding

DataReaderまたはDataAdapter(DataSetに入力する方法のいずれか)がCLOBをバイト配列に格納すると想定しています。(SQLServerおよびInformixドライバーの場合と同様)。

byte[] clob;
// get it from your datarow/datagridview bound item
string thexml = System.Text.Encoding.UTF8.GetString(theclob)
于 2012-05-24T11:10:26.790 に答える
2

私は単純なものを使用しました:

if (reader.IsDBNull(i))
{
    cellValue = "NULL";
}
else
{
    OracleLob clob = reader.GetOracleLob(i);
    cellValue  = (string) clob.Value;
}
于 2012-05-30T11:58:20.490 に答える