0

私は非常に単純な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;

そして、上記のSPを消費するクライアント.Net 4.0コードがあります

    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]Syntax error or access violationが発生し、コール スタック全体が

System.Data.Odbc.OdbcException が処理されませんでした Message=ERROR [42000] [Microsoft][ODBC driver for Oracle] 構文エラーまたはアクセス違反
ソース = msorcl32.dll ErrorCode =-2146232009 StackTrace: System.Data.Odbc.OdbcConnection.HandleError (OdbcHandle hrHandle、RetCode retcode) で System.Data.Odbc.OdbcCommand.ExecuteReaderObject (CommandBehavior の動作、文字列メソッド、ブール値の needReader、オブジェクト [ ] methodArguments、SQL_API odbcApiMethod) で System.Data.Odbc.OdbcCommand.ExecuteReaderObject(CommandBehavior の動作、文字列メソッド、ブール値の needReader) で System.Data.Odbc.OdbcCommand.ExecuteNonQuery() で ConsoleApplication1.Program.Main(String[] args) D:\Temp\ConsoleApplication1\ConsoleApplication1\Program.cs:32 行目 System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args) at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity,String[] args) で Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly() で System.Threading.ThreadHelper.ThreadStart_Context(オブジェクト状態) で System.Threading.ExecutionContext.Run(ExecutionContext executionContext、ContextCallback コールバック、オブジェクト状態、Boolean ignoreSyncCtx) でSystem.Threading.ExecutionContext.Run (ExecutionContext executionContext、ContextCallback コールバック、オブジェクト状態) で System.Threading.ThreadHelper.ThreadStart() で InnerException:System.Threading.ThreadHelper.ThreadStart() InnerException で実行 (ExecutionContext executionContext、ContextCallback コールバック、オブジェクト状態):System.Threading.ThreadHelper.ThreadStart() InnerException で実行 (ExecutionContext executionContext、ContextCallback コールバック、オブジェクト状態):

ここでのエラー メッセージは、何が問題なのか非常に不明確です。誰が私が何を調べるべきかについての手がかりを持っていますか?

4

1 に答える 1

0

他のテストを行い、SPでデータ型をCLOBからvarchar2に変更しただけで、コードは最大31.75Kの文字列サイズをSPに送信できるという制限付きで機能します。

于 2012-04-16T14:48:32.680 に答える