1

次のすべてを順番に試しました。

1)//レガシーコードの場合と同じ

ocmd.CommandText = "SELECT TRUNC(SYSDATE,''DD'') "VALUE" FROM DUAL";

2)//@を追加

ocmd.CommandText = @"SELECT TRUNC(SYSDATE,''DD'') "VALUE" FROM DUAL";

3)//一重引用符を試す

ocmd.CommandText = "SELECT TRUNC(SYSDATE,''DD'') 'VALUE' FROM DUAL";

4)//DDのように2つの一重引用符を試してください

ocmd.CommandText = "SELECT TRUNC(SYSDATE,''DD'') ''VALUE'' FROM DUAL";

5)//@を試してください

ocmd.CommandText = @"SELECT TRUNC(SYSDATE,''DD'') ''VALUE'' FROM DUAL";

1と2で、コンパイル時エラーが発生しました: "; expected"( "VALUE"上)

3、4、および5から、「Message = ORA-00907:右括弧がありません」と表示されました。

4

1 に答える 1

7

次のクエリはOracleで機能します:(sqlfiddle)

SELECT TRUNC(SYSDATE, 'DD') "VALUE" FROM DUAL

ただし、C#の通常の文字列リテラル内に二重引用符を書き込むには、バックスラッシュでエスケープする必要があります。

ocmd.CommandText = "SELECT TRUNC(SYSDATE, 'DD') \"VALUE\" FROM DUAL";

何らかの理由で逐語的な文字列リテラルを使用したい場合は、二重引用符を別の二重引用符でエスケープする必要があります。

ocmd.CommandText = @"SELECT TRUNC(SYSDATE, 'DD') ""VALUE"" FROM DUAL";

注:Vashがコメントで指摘したように、VALUEOracleがクエリを正しく解析するために、周囲の二重引用符は実際には必要ありません。

于 2012-04-27T22:58:24.273 に答える