【问题标题】:ODBC driver for Oracle: Syntax error or access violationOracle 的 ODBC 驱动程序:语法错误或访问冲突
【发布时间】:2012-04-27 20:01:43
【问题描述】:

我有一个非常简单的 Oracle SP

CREATE OR REPLACE procedure DEV.SL_CLOB_TEST(numId IN PLS_INTEGER,id IN PLS_INTEGER, strText IN CLOB)
as
begin
    insert into test_table values (numId,id, strText, sysdate, user);
end;

我有一个客户端 .Net 4.0 代码来使用上面的 SP

    static void Main(string[] args)
    {
        string connectionString = "Driver={Microsoft ODBC for Oracle};Server=server;Uid=username;Pwd=password";
        var connection = new OdbcConnection(connectionString);
        connection.Open();

        IDbCommand command = connection.CreateCommand();

        command.CommandText = "{call SL_CLOB_TEST(?,?,?)}";
        command.CommandType = CommandType.StoredProcedure;

        OdbcParameter parameter1 = new OdbcParameter("NUMID", OdbcType.Int);
        parameter1.Value = 123;
        parameter1.Direction = ParameterDirection.Input;
        command.Parameters.Add(parameter1);

        OdbcParameter parameter2 = new OdbcParameter("ID", OdbcType.Int);
        parameter2.Value = 234;
        parameter2.Direction = ParameterDirection.Input;
        command.Parameters.Add(parameter2);

        OdbcParameter parameter3 = new OdbcParameter("STRTEXT", OdbcType.VarChar);
        parameter3.Value = getClob();
        parameter3.Direction = ParameterDirection.Input;
        command.Parameters.Add(parameter3);

        command.ExecuteNonQuery();
    }

    private static string getClob()
    {
        return new string('a', 10);
    }
}

运行时出现错误ERROR [42000] [Microsoft][ODBC driver for Oracle]语法错误或访问冲突,整个调用堆栈是

System.Data.Odbc.OdbcException 未处理 Message=ERROR [42000] [Microsoft][Oracle ODBC 驱动程序]语法错误或访问冲突
源=msorcl32.dll 错误代码=-2146232009 堆栈跟踪: 在 System.Data.Odbc.OdbcConnection.HandleError(OdbcHandle hrHandle,RetCode retcode) 在 System.Data.Odbc.OdbcCommand.ExecuteReaderObject(CommandBehavior 行为,字符串方法,布尔需要读取器,对象[] 方法参数, SQL_API odbcApiMethod) 在 System.Data.Odbc.OdbcCommand.ExecuteReaderObject(CommandBehavior 行为,字符串方法,布尔需要读取器) 在 System.Data.Odbc.OdbcCommand.ExecuteNonQuery() 在 D:\Temp\ConsoleApplication1\ConsoleApplication1\Program.cs:line 32 中的 ConsoleApplication1.Program.Main(String[] args) 在 System.AppDomain._nExecuteAssembly(RuntimeAssembly 程序集,字符串 [] 参数) 在 System.AppDomain.ExecuteAssembly(字符串 assemblyFile,证据 assemblySecurity,String [] args) 在 Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly() 在 System.Threading.ThreadHelper.ThreadStart_Context(对象状态) 在 System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback 回调, 对象状态, Boolean 忽略SyncCtx) 在 System.Threading.ExecutionContext.Run(ExecutionContext executionContext,ContextCallback 回调,对象状态) 在 System.Threading.ThreadHelper.ThreadStart() InnerException:

这里的错误信息很不清楚是哪里出了问题。有人知道我应该调查什么吗?

【问题讨论】:

    标签: c# oracle10g odbc


    【解决方案1】:

    我做了一些其他测试,只是在 SP 中将数据类型从 CLOB 更改为 varchar2,并且代码的工作限制是我最多可以向 SP 发送 31.75K 字符串大小。

    【讨论】:

      猜你喜欢
      • 2011-01-03
      • 1970-01-01
      • 2015-03-23
      • 1970-01-01
      • 2013-06-01
      • 2016-10-19
      • 2019-02-10
      • 1970-01-01
      • 2017-04-16
      相关资源
      最近更新 更多