Esempio n. 1
0
        /// <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;
            }
        }