public void BeginTransaction()
{
try
{
this._keepalive = true;
if (_oracleConnection.State != ConnectionState.Open)
_oracleConnection.Open();
//_oracleConnection.Autocommit = false;
this._transaction = this._oracleConnection.BeginTransaction(IsolationLevel.ReadCommitted);
}
catch (Exception ex)
{
_hasError = true;
_ErrorMessage = ex.Message + "::" + ex.StackTrace;
}
}
public void CommitTransaction()
{
try
{
this._transaction.Commit();
this._keepalive = false;
}
catch (Exception ex)
{
_hasError = true;
_ErrorMessage = ex.Message + "::" + ex.StackTrace;
}
}
public void RollbackTransaction()
{
try
{
this._transaction.Rollback();
this._keepalive = false;
}
catch (Exception ex)
{
_hasError = true;
_ErrorMessage = ex.Message + "::" + ex.StackTrace;
}
}
public string ExecuteSPNonQuerySingleReturnValue(string storedProcName, object[] parameterValues, string outParameterName, bool useTransaction = false)
{
_hasError = false; _ErrorMessage = "";
string result = "";
try
{
if (_oracleConnection.State == ConnectionState.Closed)
_oracleConnection.Open();
if (_oracleConnection.State == ConnectionState.Open)
{
OracleCommand objOraCommand = new OracleCommand();
objOraCommand.Connection = _oracleConnection;
objOraCommand.CommandText = storedProcName;
objOraCommand.CommandType = CommandType.StoredProcedure;
if (useTransaction == true)
objOraCommand.Transaction = this._transaction;
OracleCommandBuilder.DeriveParameters(objOraCommand);
for (int i = 0; i < parameterValues.Length; i++)
{
//objOraCommand.Parameters.Add(new OracleParameter(parameterNames[i], OracleType.VarChar)).Value = (parameterValues[i] == null) ? DBNull.Value : parameterValues[i];
// It threw exception over here. Below this line.
objOraCommand.Parameters[i].Value = (parameterValues[i] == null) ? DBNull.Value : parameterValues[i];
//objOraCommand.Parameters.AddWithValue(parameterNames[i], (parameterValues[i] == null) ? DBNull.Value : parameterValues[i]);
}
objOraCommand.ExecuteNonQuery();
result = objOraCommand.Parameters[outParameterName].Value.ToString();
}
}
catch (Exception ex)
{
_hasError = true;
_ErrorMessage = ex.Message;
}
finally
{
if (_oracleConnection.State == ConnectionState.Open && _keepalive == false)
_oracleConnection.Close();
}
return result;
}
이 줄에서는 예외가 발생합니다.Count가 0 인이 OracleParameterCollection에 대해 유효하지 않은 인덱스 0
objOraCommand.Parameters[i].Value = (parameterValues[i] == null) ? DBNull.Value : parameterValues[i];
누구에게 무슨 문제가 있는지 알고 있나요? 거래없이 잘 작동했습니다. 이 메소드는 트랜잭션을 추가 한 직후에 오류가 발생하기 시작했습니다.
내장 된 Oracle oracle 클라이언트 라이브러리를 사용하고 있습니다.
using System.Data.OracleClient;
매개 변수를 추가하지 않은 상태에서 액세스하려고합니다. 인덱스 0이 첫 번째 요소입니다. 매개 변수가없는 빈 매개 변수 컬렉션 –
이것은 프로 시저 CHCCC_STSS (PSSS IN VARCHAR2, PCCC IN VARCHAR2, varReturnValue OUT VARCHAR2)를 호출하는 절차입니다. 그리고 나는 그 매개 변수에 적절한 값을 전달하고있다. –
매개 변수, 특히 매개 변수를 사용하는 방법에 대한 ADO.NET 튜토리얼을 확인하십시오. –