OracleLob.Write メソッドとは? わかりやすく解説

OracleLob.Write メソッド

バイト シーケンス現在の OracleLob ストリーム書き込み書き込んだバイト数の分だけストリーム内の現在位置進めます

名前空間: System.Data.OracleClient
アセンブリ: System.Data.OracleClient (system.data.oracleclient.dll 内)
構文構文

例外例外
例外種類条件

ArgumentNullException

buffer パラメータnull 参照 (Visual Basic の場合Nothing) です。

ArgumentOutOfRangeException

offset パラメータまたは count パラメータの値が正の値ではありません。

または

offset パラメータcount パラメータ合計値が、buffer長さ超えてます。

または

count パラメータまたは offset パラメータ指定された値が 0 より小さいか、4 GB超えてます。

または

CLOB および NCLOB データ型には、偶数バイト数を指定する必要があります

InvalidOperationException

操作トランザクション内で実行されていないか、OracleLob オブジェクトnull か、または接続閉じられています。

ObjectDisposedException

オブジェクト閉じられているか、破棄されています。

OracleException

Oracle エラー発生しました

解説解説

書き込み操作成功した場合は、書き込まれたバイト数だけストリーム内の位置進みます例外発生した場合は、ストリーム内の位置そのまま変わりません。

LOB末尾超えて書き込むことができますその場合、LOB は、書き込んだバイト数だけ拡大されます。

.NET Framework Oracleデータ プロバイダは、すべての CLOB データおよび NCLOB データUnicode として処理します。したがってCLOB 型および NCLOB 型では 1 文字2 バイトとなるため、これらにアクセスするときは常に複数バイトを扱うことになります。たとえば、3 文字から成る文字列が、1 文字が 4 バイト文字セット使用している Oracle サーバーNCLOB として保存されていて、Write 操作実行する場合文字列サーバー12 バイトとして格納されていますが、文字列長さは 6 バイト指定します

LOB書き込むには、SQL SELECT ステートメントで FOR UPDATE 句を使用して LOB取得する必要があり、さらにローカル トランザクション開始している必要があります

OracleLob オブジェクト書き込む方法C# の例を次に示します

public static void WriteLobExample(OracleCommand command)
{
   //Note: Updating LOB data requires a transaction.
   command.Transaction = command.Connection.BeginTransaction();
   //Select some data.
   //    Table Schema:
   //        "CREATE TABLE tablewithlobs (a int, b BLOB, c BLOB)";
   //        "INSERT INTO tablewithlobs values (1, 'AA', 'AAA')";
   command.CommandText = "SELECT * FROM TableWithLobs FOR UPDATE";
   OracleDataReader reader = command.ExecuteReader();
   using(reader)
   {
      //Obtain the first row of data.
      reader.Read();
      //Obtain both LOBs.
      OracleLob BLOB1    = reader.GetOracleLob(1);
      OracleLob BLOB2    = reader.GetOracleLob(2);
      //Perform any desired operations on the LOB, (read, position, and so on).
      //...
      //Example - Writing binary data (directly to the backend).
      //To write, you can use any of the stream classes, or write raw binary data
 using 
      //the OracleLob write method. Writing character vs. binary is the same;
      //however note that character is always in terms of Unicode byte counts
      //(for example: even number of bytes - 2 bytes for every Unicode character).
      byte[] buffer = new byte[100];
      buffer[0] = 0xCC;
      buffer[1] = 0xDD;
      BLOB1.Write(buffer, 0, 2);
      BLOB1.Position = 0;
      Console.WriteLine(BLOB1.LobType + ".Write(" + buffer + ", 0, 2) => " + BLOB1.Value);

      //Example - Copying data into another LOB.
      long actual = BLOB1.CopyTo(BLOB2);
      Console.WriteLine(BLOB1.LobType + ".CopyTo(" + BLOB2.Value + ") => " + actual);

      //Commit the transaction now that everything succeeded.
      //Note: On error, Transaction.Dispose is called (from the using statement)
      //and will automatically roll-back the pending transaction.
      command.Transaction.Commit();
   }
}
メモメモ

読み取り専用LOB対す書き込み操作成功する可能性ありますが、サーバー上の LOB更新されません。ただし、この場合LOBローカル コピー更新されます。たがってOracleLob オブジェクト対すその後読み取り操作では、書き込み操作結果返される可能性あります

プラットフォームプラットフォーム
バージョン情報バージョン情報
参照参照
関連項目
OracleLob クラス
OracleLob メンバ
System.Data.OracleClient 名前空間


このページでは「.NET Framework クラス ライブラリ リファレンス」からOracleLob.Write メソッドを検索した結果を表示しています。
Weblioに収録されているすべての辞書からOracleLob.Write メソッドを検索する場合は、下記のリンクをクリックしてください。
 全ての辞書からOracleLob.Write メソッド を検索

英和和英テキスト翻訳>> Weblio翻訳
英語⇒日本語日本語⇒英語
  

辞書ショートカット

すべての辞書の索引

OracleLob.Write メソッドのお隣キーワード
検索ランキング

   

英語⇒日本語
日本語⇒英語
   



OracleLob.Write メソッドのページの著作権
Weblio 辞書 情報提供元は 参加元一覧 にて確認できます。

   
日本マイクロソフト株式会社日本マイクロソフト株式会社
© 2025 Microsoft.All rights reserved.

©2025 GRAS Group, Inc.RSS