0

あらゆる種類の削除ステートメントを実行すると、無効なステートメント例外が発生するという非常に奇妙なエラー。

私のクエリはdelete from table where Id = 1です。ID は主キーではありません。主キーを使用しないいくつかの削除ステートメントも実行する必要があります。まったく同じステートメントがヒキガエルで実行されます。

接続文字列:

<add name="Oracle_xxxxx" connectionString="Driver={Microsoft ODBC for Oracle};Server=
(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=*host*)(PORT=*port*))(CONNECT_DATA=
(SID=*sid*)));Uid=*uid*;Pwd=*pwd*;" providerName="System.Data.Odbc" />

クエリは正常に実行されます。可能であれば、接続文字列/ドライバーを変更したくありません。

エラーメッセージ :

A first chance exception of type 'System.Data.Odbc.OdbcException' occurred in System.Data.dll
at System.Data.Odbc.OdbcConnection.HandleError(OdbcHandle hrHandle, RetCode retcode)
at System.Data.Odbc.OdbcCommand.ExecuteReaderObject(CommandBehavior behavior, String
method, Boolean needReader, Object[] methodArguments, SQL_API odbcApiMethod)
at System.Data.Odbc.OdbcCommand.ExecuteReaderObject(CommandBehavior behavior, String  
method, Boolean needReader)
at System.Data.Odbc.OdbcCommand.ExecuteReader(CommandBehavior behavior)
at System.Data.Odbc.OdbcCommand.ExecuteReader()
at ClientOnBoarding.COBTrackerDataManager.*function*() in C:\Working\SVN\xx\App_Code\xx.cs:line 928

ERROR [42000] [Microsoft][ODBC driver for Oracle][Oracle]ORA-00900: invalid SQL statement

どんな助けでも大歓迎です!

編集: 最初に ExecuteNonQuery() を実行し、次に ExecuteReader() をテストしましたが、両方とも同じエラーが発生しました-上記の誤解を招くエラーメッセージをお詫びします。

編集 2:Toad で SQL を何度も試してみましたが、問題はありませんでした。私の update ステートメントと insert ステートメントはすべて、末尾のセミコロンの有無にかかわらず、まったく問題なく機能します。削除だけが例外でした。

編集3:

OdbcCommand cmd = new OdbcCommand("@delete from table where Id = " + param, conn);
//conn is OdbcConnection object with valid connection I use for all other commands. Conn is open. param is a string (which is a number)
try
{
    //cmd.ExecuteReader();//was testing both
    cmd.ExecuteNonQuery();
}//end try
catch (Exception e)
{
    System.Diagnostics.Debug.WriteLine(e.StackTrace);
    System.Diagnostics.Debug.WriteLine(e.InnerException);
    System.Diagnostics.Debug.WriteLine(e.Message);
}//end catch
4

2 に答える 2

1

わかりましたみんな馬鹿みたいです... @記号は引用の前ではなく後にありました...

OdbcCommand cmd = new OdbcCommand("@delete from table where Id = " + param, conn);

する必要があります

OdbcCommand cmd = new OdbcCommand(@"delete from table where Id = " + param, conn);
于 2012-06-27T04:06:14.547 に答える
1

エラー メッセージからは、SQL ステートメント エラーのように見えますが、.NET とは関係ありません。このクエリを oracle で直接実行してみてください。また、Oracleでは「;」が必要だと思います 最後delete from table where Id = 1;に、IDまたはテーブル名がキーワードでないことも確認してください

于 2012-06-26T10:55:03.827 に答える