1

C# から Dd2OleDb ver.6 ドライバーを使用して、DB2 でストアド プロシージャを呼び出そうとしています。を呼び出すとcmd.ExecuteNonQueryOleDbExceptionSQLCode -379 の がスローされます。メッセージ全文は以下。

正常に動作する別のストアド プロシージャへの同様の呼び出しがあります。

どちらのストアド プロシージャも、IBM DB2 クライアントを使用すると問題なく動作しますが、OleDB を使用する標準を採用しようとしています。すべてのパラメータ値が正しいタイプで、範囲内にあります。

OS: Windows 8.1

.Net フレームワーク 4.6.1 Visual Studio 2017

C# クライアント

const string storedProc = @"T99XXX.CI419UPDATE";

using (var conn = GetCisDBConnection())
using (var cmCommand = new OleDbCommand(storedProc, conn))
{
       cmCommand.CommandType = System.Data.CommandType.StoredProcedure;

       var pCustNbr = new OleDbParameter("P_CUST_NBR", customerNbr);
       var pPremNbr = new OleDbParameter("P_PREM_NBR", premiseNbr);
       var pCmsgType = new OleDbParameter("P_CMSG_TYPE", cmsgType);
       var pCmsgText = new OleDbParameter("P_CMSG_TEXT", cmsgText);
       var pStatus = new OleDbParameter("O_STATUS", OleDbType.Integer, 10, System.Data.ParameterDirection.Output, true, 0, 0, null, System.Data.DataRowVersion.Current, null);
       var pSqlCode = new OleDbParameter("O_SQLCODE", OleDbType.Integer, 10, System.Data.ParameterDirection.Output, true, 0, 0, null, System.Data.DataRowVersion.Current, null);

       cmCommand.Parameters.Add(pCustNbr);
       cmCommand.Parameters.Add(pPremNbr);
       cmCommand.Parameters.Add(pCmsgType);
       cmCommand.Parameters.Add(pCmsgText);
       cmCommand.Parameters.Add(pStatus);
       cmCommand.Parameters.Add(pSqlCode);

       conn.Open();
       cmCommand.ExecuteNonQuery(); // Returns -379

ストアド プロシージャ ヘッダー:

CREATE PROCEDURE T14TOPS.CI419UPDATE (
    IN P_CUST_NBR DECIMAL(7,0),
    IN P_PREM_NBR DECIMAL(7,0),
    IN P_CMSG_TYPE DECIMAL(3,0),
    IN P_CMSG_TEXT VARCHAR(980),
    OUT O_STATUS INTEGER,
    OUT O_SQLCODE INTEGER)

完全なエラー メッセージは次のとおりです。

System.Data.OleDb.OleDbException
HResult=0x80040E14
Message=内部ネットワーク ライブラリ エラーが発生しました。ネットワーク レベルの構文エラーが発生しました。SQLSTATE: HY000、SQLCODE: -379
ソース = System.Data

スタックトレース:

System.Data.OleDb.OleDbCommand.ExecuteCommandTextErrorHandling (OleDbHResult hr) で System.Data.OleDb.OleDbCommand.ExecuteCommandTextForMultpleResults (tagDBPARAMS dbParams、Object& executeResult) で System.Data.OleDb.OleDbCommand.ExecuteCommandText(Object& executeResult) で System.Data. System.Data.OleDb.OleDbCommand.ExecuteReaderInternal(CommandBehavior 動作、文字列メソッド) の OleDb.OleDbCommand.ExecuteCommand(CommandBehavior 動作、Object& executeResult) System.Data.OleDb.OleDbCommand.ExecuteNonQuery()、CustomerCare.DataAccess.CisDataAccess.UpdateLog( C:\TFS\MSServer\Source\Main\DataAccess\CisDataAccess.cs の 10 進数の customerNbr、10 進数の premiseNbr、10 進数の cmsgType、String cmsgText): C の DataAccessTest.CisDataAccessTest.UpdateLog_Test() の 103 行目:\TFS\MSServer\Source\Main\DataAccessTest\CisDataAccessTest.cs: 30 行目

System.IndexOutOfRangeException
HResult=0x80131508
Message=Count=6 のこの OleDbParameterCollection の無効なインデックス -1。
ソース=System.Data

4

1 に答える 1