Oracle(11g)データベースに次のような2つのテーブルを作成します。
create table "test" ("id" int);
create table test ("id" int);
その後、私のC#プログラムに問題があります:
OracleConnection conn = new OracleConnection(-myConnectionString-);
conn.Open();
OracleCommand command = new OracleCommand("select * from test;", conn);
var v = command.ExecuteReader();
OracleCommand command = new OracleCommand("select * from \"test\";", conn);
var v = command.ExecuteReader();
両方のcommand.ExecuteReader()に対して、「ORA-00911:無効な文字」エラーがあります。
削除; (セミコロン)SQL文字列の末尾から
他の人が1つのコマンドに複数のステートメントを含める方法を探している場合、ステートメントをbeginおよびendで囲む必要があります。これにより、セミコロンによる無効な文字エラーが停止します。例えば:
var command = new OracleCommand(@"
begin
select * from test;
select * from test2;
end;")
なぜクエリでセミコロンを使用しているのか...無効な文字と見なされるだけです.....クエリからセミコロン(;)を削除して、次のようにする必要があります。
OracleConnection conn = new OracleConnection(-myConnectionString-);
conn.Open();
OracleCommand command = new OracleCommand("select * from test", conn);
var v = command.ExecuteReader();
OracleCommand command = new OracleCommand("select * from \"test\"", conn);
var v = command.ExecuteReader();
このエラーの詳細については、 here と読むことができます。
これはこの男の問題ではありませんが、うまくいけば、これはそこにいる誰かを助けるでしょう:
次のように、インラインコメント内に単一引用符が隠されていると、この問題がよく発生します。
select foo
from bar
where
/* some helpful comment with a "can't" or somesuch */
baz='qux'
コメント内の比類のない一重引用符は、あらゆる種類のドラマを引き起こします。Oracleは、あなたがそれを理解するのを助けようとはしません。