Я пытаюсь вызвать хранимую процедуру в DB2, используя драйвер Dd2OleDb ver.6 из C#. При вызове cmd.ExecuteNonQuery
генерируется OleDbException
с SQLCode -379. Полное сообщение ниже.
У меня есть аналогичный вызов другой хранимой процедуры, которая отлично работает.
Обе хранимые процедуры прекрасно работают при использовании клиентов IBM DB2, однако мы пытаемся принять стандарт использования OleDB. Все значения параметров имеют правильный тип и находятся в диапазоне.
ОС: Windows 8.1
.NET Framework 4.6.1 Visual Studio 2017
С# клиент
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
Source=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. OleDb.OleDbCommand.ExecuteCommand (поведение CommandBehavior, Object& executeResult) в System.Data.OleDb.OleDbCommand.ExecuteReaderInternal (поведение CommandBehavior, метод String) в System.Data.OleDb.OleDbCommand.ExecuteNonQuery() в CustomerCare.DataAccess.CisDataAccess.UpdateLog( Decimal customerNbr, Decimal premiseNbr, Decimal cmsgType, String cmsgText) в C:\TFS\MSServer\Source\Main\DataAccess\CisDataAccess.cs:строка 103 в DataAccessTest.CisDataAccessTest.UpdateLog_Test() в C:\TFS\MSServer\Source\ Main\DataAccessTest\CisDataAccessTest.cs:строка 30
System.IndexOutOfRangeException
HResult=0x80131508
Message=Неверный индекс -1 для этой коллекции OleDbParameterCollection со значением Count=6.
Source=System.Data
Invalid index -1 for this OleDbParameterCollection
. - person LarsTech   schedule 29.03.2019