私はこれを使ってウェブ全体を調べましたが、探していることを行う方法が見つからないことに驚いています.
非推奨のライブラリではなくOracle.DataAccess.Client
、C# プロジェクトでライブラリを使用していますSystem.Data.OracleClient.
私は非常に単純なテーブルを持っています:
CREATE TABLE testing (
ID NUMBER(10),
COMMENTS CLOB,
DATECREATED DATE DEFAULT (SYSDATE) NOT NULL,
DATEMODIFIED DATE
);
INSERT INTO testing (ID, COMMENTS) VALUES(1, 'this is a test');
上記は明らかにうまく機能します。問題は、これがコメント フィールドであるため、変更されることです。私の C# プログラムでは、ユーザーがコメントを保存できるようにしたいと考えています。この例では、複雑なものをすべて削除しています。
フォームにボタンと「コメント」というテキストボックスがあります。
using (OracleConnection connection = new OracleConnection(<VALID CONN STRING GOES HERE>)) {
connection.Open();
using (OracleCommand command = new OracleCommand()) {
command.Connection = connection;
command.CommandText = "UPDATE testing SET COMMENTS = :COMMENTS, DATEMODIFIED = sysdate WHERE ID = :ID";
command.CommandType = CommandType.Text;
command.Parameters.Add("ID", OracleDbType.Int32, ParameterDirection.Input).Value = 1;
command.Parameters.Add("COMMENTS", OracleDbType.Clob, ParameterDirection.Input).Value = comments.Text;
command.ExecuteNonQuery();
}
}
したがって、基本的に、このコードは、Clob を書き込もうとしない限り機能します。変更日を保存すると、期待どおりに作成されます。ただし、Clob で保存しても何も起こりません。オラクルからのエラーメッセージも例外も何もありません。
パラメータ化を忘れて間違った方法で行った場合:
command.CommandText = "UPDATE testing SET COMMENTS = " + comments.Text + ", DATEMODIFIED = sysdate";
問題はない。ここではパラメータ化が問題のようです。