【问题标题】:C# cannot run delete statements using ODBC OracleC# 无法使用 ODBC Oracle 运行删除语句
【发布时间】:2012-06-27 16:06:48
【问题描述】:

运行任何类型的删除语句都会导致 Invalid Statement 异常的非常奇怪的错误。

我的查询是delete from table where Id = 1。 Id 不是主键。我还需要运行几个不使用主键的删除语句。在 toad 上运行完全相同的语句。

连接字符串:

<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,没有任何问题。无论有没有尾随分号,我的更新和插入语句都可以正常工作。只有删除给了我一个例外。

编辑 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

【问题讨论】:

  • 你是如何执行查询的?你在使用ExecuteNonQuery();,你是如何构建它的。
  • 检查是否安装了程序选项。
  • @Habib.OSU 说了什么!查看堆栈跟踪,您似乎正在调用ExecuteReader。尝试将其更改为ExecuteNonQuery,看看是否会改变您的结果。
  • 发布 C# 代码连接到查询。
  • 我很抱歉 - 我先运行了 ExecuteNonQuery(),然后测试了 ExecuteReader() 并且都给了我同样的错误。您在上面看到的错误对于两者都是相同的。

标签: c# asp.net oracle odbc


【解决方案1】:

从错误消息看来,这是一个 sql 语句错误,与 .NET 无关。尝试直接在 oracle 中运行此查询。另外,我认为在 Oracle 中你需要“;”最后delete from table where Id = 1;,还要确保Id或表名不是关键字

【讨论】:

  • 感谢您的回答。 Id 和 table 都绝对不是关键字,无论是否使用尾随分号,该命令都可以在 Toad 上完美运行。在我的编辑中,我已经在 Toad 上测试了所有查询,并且我的所有插入和更新都可以正常工作。只有删除给了我例外。我担心这可能是驱动问题?
【解决方案2】:

好吧,伙计们觉得自己像个白痴……@符号在引号之后而不是之前……

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

应该是

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

【讨论】:

    猜你喜欢
    • 2018-05-14
    • 2019-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-13
    • 1970-01-01
    相关资源
    最近更新 更多