-2

Oracle に Date Var があり、C# プログラムからデータを挿入しようとしています

sql = "insert into Table(MyDate) values (" + convert.todatetime(txt) + ")";

エラーが発生しました。どうすればよいですか?

4

7 に答える 7

12
cmd.CommandText = "INSERT INTO Table (myDate)VALUES(:dateParam)";

cmd.Parameters.Add(new OracleParameter("dateParam", OracleDbType.Date))
    .Value = DateTime.Now;

cmd.ExecuteNonQuery();
于 2009-03-30T18:23:10.820 に答える
8

パラメータを使用します。あなたの問題を解決し、注射を防ぎます。

于 2009-03-30T18:09:26.237 に答える
6

Oracle は、日付のように見える単なる文字列ではなく、実際の日付値であると想定しています。次のように、関数を使用してTO_DATE()、文字列がどのようにフォーマットされているかを説明する必要があります。

INSERT INTO Table (myDate)
VALUES(TO_DATE('2009-03-30 12:30:00', 'YYYY-MM-DD HH:mi:ss'));
于 2009-03-30T18:10:14.487 に答える
1

DateTime.TryParse(text) または DateTime.Parse(text) を使用してみてください

于 2009-03-30T18:11:49.710 に答える
0

これはよくない質問であることは知っていますが、同じ質問をしてこれに遭遇したときに、いくつかの悪い答えを見ました. これが私がそれを解決した方法であり、OPのコンテキストを使用して答えます:

DateTime日付を変数に解析します。

DateTime myDate = DateTime.Parse(txt);

次に、クエリをパラメーター化します。

sql = "insert into Table(MyDate) values (:myDate)";

をセットアップしますOracleParameter

OracleParameter param = new OracleParameter();
param.ParameterName = "myDate";
param.OracleDbType = OracleDbType.Date;
param.Value = myDate;

OracleConnectionasが既にあると仮定connectionして、コマンドを設定し、パラメータを追加します。

OracleCommand cmd = new OracleCommand(sql, connection);
cmd.Parameters.Add(param);

実行する:

cmd.ExecuteNonQuery();

ナンセンスなことに時間を無駄にしないでください。TO_DATEこれは、SQL*Plus または Oracle SQL Developer を直接使用して何かを追加する場合、または STRING 変数の値 (DateTime 変数ではない) を EXACT 形式で送信するTO_DATE場合に使用しTO_DATEます。クエリまたはストアド プロシージャ (つまり、テーブルにフィールドがあり、変数に解析できると仮定して、変数をto_date('2013-05-13 12:13:14', 'YYYY-MM-DD HH24:MI:SS')使用し、それをofにDateTime割り当てるのが最善かつ最も簡単です。 OracleParameterOracleDbTypeOracleDbType.DateDATEtxtDateTime

于 2016-10-05T17:15:46.927 に答える
0

変数をバインドしてください (ocdecio のように) ! SQL インジェクションを防ぐだけでなく、はるかに高速です。特に複数の同時実行状況では。たとえば、http: //download.oracle.com/docs/cd/B28359_01/appdev.111/b28844/building_odp.htm#CEGCGDABを参照してください。

「バインド変数は、SQL文内のプレースホルダです。データベースがSQL文を受け取ると、文がすでに実行されてメモリーに格納されているかどうかが判断されます。文がメモリーに存在する場合、Oracle Databaseはそれを再利用して、次のタスクをスキップできます。ステートメントの解析と最適化.バインド変数を使用すると、異なる入力値でステートメントを再利用できます.バインド変数を使用すると、データベースでのクエリのパフォーマンスも向上し、入力内のリテラル引用符を特別に処理する必要がなくなり、SQL インジェクション攻撃から保護されます. "

于 2009-03-30T18:29:26.453 に答える