8

スローしているコード行があります

Oracle 例外 - ORA-00911: 無効な文字

次のC#コードを試すとき:

double tempDateTimeObj = Convert.ToDouble(someClass.GetTime(tempObjID, objStartTime, todayTime).Rows[0][0]);

GetTime は、上記の変数を受け取る SQL 呼び出しを行う関数です。SQL 呼び出しは Oracle 数値型を出力し、GetTime C# 関数はDataTableCollection Tables毎回 1 行のオブジェクトを返します。

public static DataTable GetTime(string tempObjID, DateTime objStartTime, DateTime todayTime)
{

    string sql = "select some_pkg.get_time('" + tempObjID + "', to_date('" + objStartTime + "', 'mm/dd/yyyy hh:mi:ss am'), to_date('" + todayTime + "', 'mm/dd/yyyy hh:mi:ss am')) from dual;";

    return <connection object>.getDS(sql).Tables[0];
}

デバッグして、変数の値を持つ SQL 文字列を取得し、それを Oracle SQL Developer に投入すると、問題なく動作し、SQL Dev コンソールに数値が返されます。ただし、デバッグしてその行に遭遇すると、C# コードは 00911 例外をスローします。文字列 sql は Oracle SQL Dev でテストされているため、構文は有効です。有効な構文が与えられた場合、VS2010 がこのエラー/例外をスローするのはなぜですか?

編集: これは、C# でビルドされて DB に送信されるもののサンプル文字列です。

select some_pkg.get_time('23569245', to_date('11/8/2012 1:21:06 PM', 'mm/dd/yyyy hh:mi:ss am'), to_date('12/31/2012 12:52:18 AM', 'mm/dd/yyyy hh:mi:ss am')) from dual

C# 文字列にセミコロンを含むものとセミコロンを含まないものが試行され、どちらも Oracle SQL Dev で動作しているにもかかわらず、同じ Oracle 例外が発生しました

4

4 に答える 4