/// <summary> /// Retorna dados para a leitura das informações do banco de dados /// </summary> /// <param name="Command"></param> /// <param name="param"></param> /// <param name="TypeCommando"></param> /// <param name="TimeOut"></param> /// <returns></returns> //public virtual bool LerProcedure(string pstrCommand, object[] parrParam, CommandType TypeCommando, out SqlDataReader pobjDataReader, int TimeOut) //{ // int intIndexParams = 0; // int intErrorParamIndex = -1; // bool blnRet = true; // SqlParameter objParamErroRetorno; // string strValorParamErro; // try // { // SqlCommand objCmd = new SqlCommand(); // objCmd.CommandText = pstrCommand; // objCmd.CommandType = TypeCommando; // if (TimeOut != 0) // objCmd.CommandTimeout = TimeOut; // if (SqlConn.Trans != null) // objCmd.Transaction = SqlConn.Trans; // DeriveParameters(objCmd); // if (parrParam != null) // { // for (intIndexParams = 0; intIndexParams < parrParam.Length; intIndexParams++) // { // SqlParameter iDataParam = new SqlParameter(); // iDataParam = (SqlParameter)objCmd.Parameters[intIndexParams + 1]; // if (parrParam[intIndexParams] != null) // iDataParam.Value = parrParam[intIndexParams]; // else // iDataParam.Value = DBNull.Value; // } // } // objCmd.Prepare(); // pobjDataReader = objCmd.ExecuteReader(); // //testar retorno erro // if (intErrorParamIndex > -1) // { // objParamErroRetorno = (SqlParameter)objCmd.Parameters[intErrorParamIndex]; // strValorParamErro = objParamErroRetorno.Value.ToString(); // blnRet = (strValorParamErro == "0"); // } // return blnRet; // } // catch (SystemException e) // { // throw e; // } //} public virtual bool LerProcedure(string pstrCommand, object[] parrParam, out IDataReader pobjDataReader, int timeout) { int intIndexParams = 0; // Para o provider nativo SQL, verificamos que o primeiro parâmetro (indice 0) //é o código de retorno da procedure //Para o provider OleDB não existe esse parametro 0. Testamos apenas com IBMDA400 int intParamOleDB; int intErrorParamIndex = -1; bool blnRet = true; IDataParameter objParamErroRetorno; string strValorParamErro; try { IDbCommand objCmd = pf.CreateCommand(); objCmd.CommandText = pstrCommand; objCmd.CommandType = CommandType.StoredProcedure; objCmd.CommandTimeout = timeout; objCmd.Connection = SqlConn.Conexao; if (SqlConn.Trans != null) { objCmd.Transaction = SqlConn.Trans; } DeriveParameters(ref objCmd); // Como não existe uma interface para o CommandBuilder, // precisamos determinar que tipo utilizaremos. switch (menuProvider) { case ProviderType.SqlClient: intParamOleDB = 1; break; case ProviderType.OracleClient: case ProviderType.ODBC: case ProviderType.OleDb: case ProviderType.MySqlClient: intParamOleDB = 0; break; default: intParamOleDB = 0; break; } if (parrParam != null) { for (intIndexParams = 0; intIndexParams < parrParam.Length; intIndexParams++) { IDataParameter iDataParam = pf.CreateDataParameter(); iDataParam = (IDataParameter)objCmd.Parameters[intIndexParams + intParamOleDB]; if (parrParam[intIndexParams] != null) { iDataParam.Value = parrParam[intIndexParams]; } else { iDataParam.Value = DBNull.Value; } } } objCmd.Prepare(); if (menuProvider.Equals(ProviderType.MySqlClient)) { pobjDataReader = objCmd.ExecuteReader(CommandBehavior.SequentialAccess); } else { pobjDataReader = objCmd.ExecuteReader(); } //testar retorno erro if (intErrorParamIndex > -1) { objParamErroRetorno = (IDataParameter)objCmd.Parameters[intErrorParamIndex]; strValorParamErro = objParamErroRetorno.Value.ToString(); blnRet = (strValorParamErro == "0"); } return(blnRet); } catch (SystemException e) { throw e; } }