/// <summary> 
        /// Retorna um objeto PedidoFields preenchido com os valores dos campos do SqlDataReader
        /// </summary>
        /// <param name="dr">SqlDataReader - Preenche o objeto PedidoFields </param>
        /// <returns>PedidoFields</returns>
        private PedidoFields GetDataFromReader( SqlDataReader dr )
        {
            PedidoFields infoFields = new PedidoFields();

            if (!dr.IsDBNull(0))
            { infoFields.idPedido = dr.GetInt32(0); }
            else
            { infoFields.idPedido = 0; }

            if (!dr.IsDBNull(1))
            { infoFields.dtPedido = dr.GetDateTime(1); }
            else
            { infoFields.dtPedido = DateTime.MinValue; }

            if (!dr.IsDBNull(2))
            { infoFields.dtSaidaPedido = dr.GetDateTime(2); }
            else
            { infoFields.dtSaidaPedido = DateTime.MinValue; }

            if (!dr.IsDBNull(3))
            { infoFields.tipoPedido = dr.GetString(3); }
            else
            { infoFields.tipoPedido = string.Empty; }

            if (!dr.IsDBNull(4))
            { infoFields.situacaoPedido = dr.GetString(4); }
            else
            { infoFields.situacaoPedido = string.Empty; }

            if (!dr.IsDBNull(5))
            { infoFields.tipoEntregaPedido = dr.GetString(5); }
            else
            { infoFields.tipoEntregaPedido = string.Empty; }

            if (!dr.IsDBNull(6))
            { infoFields.fkCliente = dr.GetInt32(6); }
            else
            { infoFields.fkCliente = 0; }

            if (!dr.IsDBNull(7))
            { infoFields.fkUsuario = dr.GetInt32(7); }
            else
            { infoFields.fkUsuario = 0; }

            if (!dr.IsDBNull(8))
            { infoFields.fkTipoPagamento = dr.GetInt32(8); }
            else
            { infoFields.fkTipoPagamento = 0; }

            if (!dr.IsDBNull(9))
            { infoFields.fkFormaPagamento = dr.GetInt32(9); }
            else
            { infoFields.fkFormaPagamento = 0; }

            if (!dr.IsDBNull(10))
            { infoFields.valorTotalPedido = dr.GetDecimal(10); }
            else
            { infoFields.valorTotalPedido = 0; }

            if (!dr.IsDBNull(11))
            { infoFields.numeroPedido = dr.GetInt32(11); }
            else
            { infoFields.numeroPedido = 0; }

            if (!dr.IsDBNull(12))
            { infoFields.fkLoja = dr.GetInt32(12); }
            else
            { infoFields.fkLoja = 0; }

            if (!dr.IsDBNull(13))
            { infoFields.numeroNF = dr.GetString(13); }
            else
            { infoFields.numeroNF = string.Empty; }

            if (!dr.IsDBNull(14))
            { infoFields.Observacao = dr.GetString(14); }
            else
            { infoFields.Observacao = string.Empty; }

            if (!dr.IsDBNull(15))
            { infoFields.ValorDesconto = dr.GetDecimal(15); }
            else
            { infoFields.ValorDesconto = 0; }

            if (!dr.IsDBNull(16))
            { infoFields.ValorFrete = dr.GetDecimal(16); }
            else
            { infoFields.ValorFrete = 0; }

            return infoFields;
        }
 /// <summary> 
 /// Grava/Persiste as alterações em um objeto PedidoFields no banco de dados
 /// </summary>
 /// <param name="ConnIn">Objeto SqlConnection responsável pela conexão com o banco de dados.</param>
 /// <param name="TranIn">Objeto SqlTransaction responsável pela transação iniciada no banco de dados.</param>
 /// <param name="FieldInfo">Objeto PedidoFields a ser alterado.</param>
 /// <returns>"true" = registro alterado com sucesso, "false" = erro ao tentar alterar registro (consulte a propriedade ErrorMessage para detalhes)</returns> 
 public bool Update( SqlConnection ConnIn, SqlTransaction TranIn, PedidoFields FieldInfo )
 {
     try
     {
         this.Cmd = new SqlCommand("Proc_Pedido_Update", ConnIn, TranIn);
         this.Cmd.CommandType = CommandType.StoredProcedure;
         this.Cmd.Parameters.Clear();
         this.Cmd.Parameters.AddRange(GetAllParameters(FieldInfo, SQLMode.Update));
         if (!(this.Cmd.ExecuteNonQuery() > 0)) throw new Exception("Erro ao tentar atualizar registro!!");
         return true;
     }
     catch (SqlException e)
     {
         //this._ErrorMessage = string.Format(@"Houve um erro imprevisto ao tentar atualizar o(s) registro(s) solicitados: Código do erro: {0}, Mensagem: {1}, Procedimento: {2}, Linha do erro {3}.", e.ErrorCode, e.Message, e.Procedure, e.LineNumber);
         this._ErrorMessage = string.Format(@"Houve um erro imprevisto ao tentar atualizar o(s) registro(s) solicitados: {0}.",  e.Message);
         return false;
     }
     catch (Exception e)
     {
         this._ErrorMessage = e.Message;
         return false;
     }
 }
        /// <summary> 
        /// Retorna um array de parâmetros com campos para atualização, seleção e inserção no banco de dados
        /// </summary>
        /// <param name="FieldInfo">Objeto PedidoFields</param>
        /// <param name="Modo">Tipo de oepração a ser executada no banco de dados</param>
        /// <returns>SqlParameter[] - Array de parâmetros</returns> 
        private SqlParameter[] GetAllParameters( PedidoFields FieldInfo, SQLMode Modo )
        {
            SqlParameter[] Parameters;

            switch (Modo)
            {
                case SQLMode.Add:
                    Parameters = new SqlParameter[17];
                    for (int I = 0; I < Parameters.Length; I++)
                       Parameters[I] = new SqlParameter();
                    //Field idPedido
                    Parameters[0].SqlDbType = SqlDbType.Int;
                    Parameters[0].Direction = ParameterDirection.Output;
                    Parameters[0].ParameterName = "@Param_idPedido";
                    Parameters[0].Value = DBNull.Value;

                    break;

                case SQLMode.Update:
                    Parameters = new SqlParameter[17];
                    for (int I = 0; I < Parameters.Length; I++)
                       Parameters[I] = new SqlParameter();
                    //Field idPedido
                    Parameters[0].SqlDbType = SqlDbType.Int;
                    Parameters[0].ParameterName = "@Param_idPedido";
                    Parameters[0].Value = FieldInfo.idPedido;

                    break;

                case SQLMode.SelectORDelete:
                    Parameters = new SqlParameter[1];
                    for (int I = 0; I < Parameters.Length; I++)
                       Parameters[I] = new SqlParameter();
                    //Field idPedido
                    Parameters[0].SqlDbType = SqlDbType.Int;
                    Parameters[0].ParameterName = "@Param_idPedido";
                    Parameters[0].Value = FieldInfo.idPedido;

                    return Parameters;

                default:
                    Parameters = new SqlParameter[17];
                    for (int I = 0; I < Parameters.Length; I++)
                       Parameters[I] = new SqlParameter();
                    break;
            }

            //Field dtPedido
            Parameters[1].SqlDbType = SqlDbType.SmallDateTime;
            Parameters[1].ParameterName = "@Param_dtPedido";
            if ( FieldInfo.dtPedido == DateTime.MinValue )
            { Parameters[1].Value = DBNull.Value; }
            else
            { Parameters[1].Value = FieldInfo.dtPedido; }

            //Field dtSaidaPedido
            Parameters[2].SqlDbType = SqlDbType.SmallDateTime;
            Parameters[2].ParameterName = "@Param_dtSaidaPedido";
            if ( FieldInfo.dtSaidaPedido == DateTime.MinValue )
            { Parameters[2].Value = DBNull.Value; }
            else
            { Parameters[2].Value = FieldInfo.dtSaidaPedido; }

            //Field tipoPedido
            Parameters[3].SqlDbType = SqlDbType.VarChar;
            Parameters[3].ParameterName = "@Param_tipoPedido";
            if (( FieldInfo.tipoPedido == null ) || ( FieldInfo.tipoPedido == string.Empty ))
            { Parameters[3].Value = DBNull.Value; }
            else
            { Parameters[3].Value = FieldInfo.tipoPedido; }
            Parameters[3].Size = 50;

            //Field situacaoPedido
            Parameters[4].SqlDbType = SqlDbType.VarChar;
            Parameters[4].ParameterName = "@Param_situacaoPedido";
            if (( FieldInfo.situacaoPedido == null ) || ( FieldInfo.situacaoPedido == string.Empty ))
            { Parameters[4].Value = DBNull.Value; }
            else
            { Parameters[4].Value = FieldInfo.situacaoPedido; }
            Parameters[4].Size = 50;

            //Field tipoEntregaPedido
            Parameters[5].SqlDbType = SqlDbType.VarChar;
            Parameters[5].ParameterName = "@Param_tipoEntregaPedido";
            if (( FieldInfo.tipoEntregaPedido == null ) || ( FieldInfo.tipoEntregaPedido == string.Empty ))
            { Parameters[5].Value = DBNull.Value; }
            else
            { Parameters[5].Value = FieldInfo.tipoEntregaPedido; }
            Parameters[5].Size = 50;

            //Field fkCliente
            Parameters[6].SqlDbType = SqlDbType.Int;
            Parameters[6].ParameterName = "@Param_fkCliente";
            Parameters[6].Value = FieldInfo.fkCliente;

            //Field fkUsuario
            Parameters[7].SqlDbType = SqlDbType.Int;
            Parameters[7].ParameterName = "@Param_fkUsuario";
            Parameters[7].Value = FieldInfo.fkUsuario;

            //Field fkTipoPagamento
            Parameters[8].SqlDbType = SqlDbType.Int;
            Parameters[8].ParameterName = "@Param_fkTipoPagamento";
            Parameters[8].Value = FieldInfo.fkTipoPagamento;

            //Field fkFormaPagamento
            Parameters[9].SqlDbType = SqlDbType.Int;
            Parameters[9].ParameterName = "@Param_fkFormaPagamento";
            Parameters[9].Value = FieldInfo.fkFormaPagamento;

            //Field valorTotalPedido
            Parameters[10].SqlDbType = SqlDbType.Decimal;
            Parameters[10].ParameterName = "@Param_valorTotalPedido";
            Parameters[10].Value = FieldInfo.valorTotalPedido;

            //Field numeroPedido
            Parameters[11].SqlDbType = SqlDbType.Int;
            Parameters[11].ParameterName = "@Param_numeroPedido";
            Parameters[11].Value = FieldInfo.numeroPedido;

            //Field fkLoja
            Parameters[12].SqlDbType = SqlDbType.Int;
            Parameters[12].ParameterName = "@Param_fkLoja";
            Parameters[12].Value = FieldInfo.fkLoja;

            //Field numeroNF
            Parameters[13].SqlDbType = SqlDbType.VarChar;
            Parameters[13].ParameterName = "@Param_numeroNF";
            if (( FieldInfo.numeroNF == null ) || ( FieldInfo.numeroNF == string.Empty ))
            { Parameters[13].Value = DBNull.Value; }
            else
            { Parameters[13].Value = FieldInfo.numeroNF; }
            Parameters[13].Size = 200;

            //Field Observacao
            Parameters[14].SqlDbType = SqlDbType.VarChar;
            Parameters[14].ParameterName = "@Param_Observacao";
            if (( FieldInfo.Observacao == null ) || ( FieldInfo.Observacao == string.Empty ))
            { Parameters[14].Value = DBNull.Value; }
            else
            { Parameters[14].Value = FieldInfo.Observacao; }
            Parameters[14].Size = 2000;

            //Field ValorDesconto
            Parameters[15].SqlDbType = SqlDbType.Decimal;
            Parameters[15].ParameterName = "@Param_ValorDesconto";
            Parameters[15].Value = FieldInfo.ValorDesconto;

            //Field ValorFrete
            Parameters[16].SqlDbType = SqlDbType.Decimal;
            Parameters[16].ParameterName = "@Param_ValorFrete";
            Parameters[16].Value = FieldInfo.ValorFrete;

            return Parameters;
        }
 /// <summary> 
 /// Grava/Persiste as alterações em um objeto PedidoFields no banco de dados
 /// </summary>
 /// <param name="FieldInfo">Objeto PedidoFields a ser alterado.</param>
 /// <returns>"true" = registro alterado com sucesso, "false" = erro ao tentar alterar registro (consulte a propriedade ErrorMessage para detalhes)</returns> 
 public bool Update( PedidoFields FieldInfo )
 {
     try
     {
         this.Conn = new SqlConnection(this.StrConnetionDB);
         this.Conn.Open();
         this.Tran = this.Conn.BeginTransaction();
         this.Cmd = new SqlCommand("Proc_Pedido_Update", this.Conn, this.Tran);
         this.Cmd.CommandType = CommandType.StoredProcedure;
         this.Cmd.Parameters.Clear();
         this.Cmd.Parameters.AddRange(GetAllParameters(FieldInfo, SQLMode.Update));
         if (!(this.Cmd.ExecuteNonQuery() > 0)) throw new Exception("Erro ao tentar atualizar registro!!");
         this.Tran.Commit();
         return true;
     }
     catch (SqlException e)
     {
         this.Tran.Rollback();
         //this._ErrorMessage = string.Format(@"Houve um erro imprevisto ao tentar atualizar o(s) registro(s) solicitados: Código do erro: {0}, Mensagem: {1}, Procedimento: {2}, Linha do erro {3}.", e.ErrorCode, e.Message, e.Procedure, e.LineNumber);
         this._ErrorMessage = string.Format(@"Houve um erro imprevisto ao tentar atualizar o(s) registro(s) solicitados: {0}.",  e.Message);
         return false;
     }
     catch (Exception e)
     {
         this.Tran.Rollback();
         this._ErrorMessage = e.Message;
         return false;
     }
     finally
     {
         if (this.Conn != null)
           if (this.Conn.State == ConnectionState.Open) { this.Conn.Dispose(); }
         if (this.Cmd != null)
           this.Cmd.Dispose();
     }
 }
        /// <summary> 
        /// Retorna um objeto PedidoFields através da chave primária passada como parâmetro
        /// </summary>
        /// <param name="Param_idPedido">int</param>
        /// <returns>Objeto PedidoFields</returns> 
        public PedidoFields GetItem(
                                     int Param_idPedido)
        {
            PedidoFields infoFields = new PedidoFields();
            try
            {
                using (this.Conn = new SqlConnection(this.StrConnetionDB))
                {
                    using (this.Cmd = new SqlCommand("Proc_Pedido_Select", this.Conn))
                    {
                        this.Cmd.CommandType = CommandType.StoredProcedure;
                        this.Cmd.Parameters.Clear();
                        this.Cmd.Parameters.Add(new SqlParameter("@Param_idPedido", SqlDbType.Int)).Value = Param_idPedido;
                        this.Cmd.Connection.Open();
                        using (SqlDataReader dr = this.Cmd.ExecuteReader(CommandBehavior.SequentialAccess))
                        {
                            if (!dr.HasRows) return null;
                            if (dr.Read())
                            {
                               infoFields = GetDataFromReader( dr );
                            }
                        }
                    }
                 }

                 return infoFields;

            }
            catch (SqlException e)
            {
                //this._ErrorMessage = string.Format(@"Houve um erro imprevisto ao tentar selecionar o(s) registro(s) solicitados: Código do erro: {0}, Mensagem: {1}, Procedimento: {2}, Linha do erro {3}.", e.ErrorCode, e.Message, e.Procedure, e.LineNumber);
                this._ErrorMessage = string.Format(@"Houve um erro imprevisto ao tentar selecionar o(s) registro(s) solicitados: {0}.",  e.Message);
                return null;
            }
            catch (Exception e)
            {
                this._ErrorMessage = e.Message;
                return null;
            }
            finally
            {
                if (this.Conn != null)
                  if (this.Conn.State == ConnectionState.Open) { this.Conn.Dispose(); }
            }
        }
 /// <summary> 
 /// Exclui um registro da tabela no banco de dados
 /// </summary>
 /// <param name="ConnIn">Objeto SqlConnection responsável pela conexão com o banco de dados.</param>
 /// <param name="TranIn">Objeto SqlTransaction responsável pela transação iniciada no banco de dados.</param>
 /// <param name="FieldInfo">Objeto PedidoFields a ser excluído.</param>
 /// <returns>"true" = registro excluido com sucesso, "false" = erro ao tentar excluir registro (consulte a propriedade ErrorMessage para detalhes)</returns> 
 public bool Delete( SqlConnection ConnIn, SqlTransaction TranIn, PedidoFields FieldInfo )
 {
     return Delete(ConnIn, TranIn, FieldInfo.idPedido);
 }
 /// <summary> 
 /// Exclui um registro da tabela no banco de dados
 /// </summary>
 /// <param name="FieldInfo">Objeto PedidoFields a ser excluído.</param>
 /// <returns>"true" = registro excluido com sucesso, "false" = erro ao tentar excluir registro (consulte a propriedade ErrorMessage para detalhes)</returns> 
 public bool Delete( PedidoFields FieldInfo )
 {
     return Delete(FieldInfo.idPedido);
 }
        public bool isValid(PedidoFields fieldInfo)
        {
            try
            {

                //Field tipoPedido
                if (fieldInfo.tipoPedido != string.Empty)
                    if (fieldInfo.tipoPedido.Trim().Length > 50)
                        throw new Exception("O campo \"tipoPedido\" deve ter comprimento máximo de 50 caracter(es).");

                //Field situacaoPedido
                if (fieldInfo.situacaoPedido != string.Empty)
                    if (fieldInfo.situacaoPedido.Trim().Length > 50)
                        throw new Exception("O campo \"situacaoPedido\" deve ter comprimento máximo de 50 caracter(es).");

                //Field tipoEntregaPedido
                if (fieldInfo.tipoEntregaPedido != string.Empty)
                    if (fieldInfo.tipoEntregaPedido.Trim().Length > 50)
                        throw new Exception("O campo \"tipoEntregaPedido\" deve ter comprimento máximo de 50 caracter(es).");

                //Field fkCliente
                if (!(fieldInfo.fkCliente > 0))
                    throw new Exception("O campo \"fkCliente\" deve ser maior que zero.");

                //Field fkUsuario
                if (!(fieldInfo.fkUsuario > 0))
                    throw new Exception("O campo \"fkUsuario\" deve ser maior que zero.");

                //Field fkTipoPagamento
                //if ( !( fieldInfo.fkTipoPagamento > 0 ) )
                //   throw new Exception("O campo \"fkTipoPagamento\" deve ser maior que zero.");

                //Field fkFormaPagamento
                //if ( !( fieldInfo.fkFormaPagamento > 0 ) )
                //   throw new Exception("O campo \"fkFormaPagamento\" deve ser maior que zero.");

                //Field valorTotalPedido
                //if (!(fieldInfo.valorTotalPedido > 0))
                //    throw new Exception("O campo \"valorTotalPedido\" deve ser maior que zero.");

                //Field numeroPedido
                //if (!(fieldInfo.numeroPedido > 0))
                //    throw new Exception("O campo \"numeroPedido\" deve ser maior que zero.");

                //Field fkLoja
                if (!(fieldInfo.fkLoja > 0))
                    throw new Exception("O campo \"fkLoja\" deve ser maior que zero.");

                //Field numeroNF
                if (fieldInfo.numeroNF != string.Empty)
                    if (fieldInfo.numeroNF.Trim().Length > 200)
                        throw new Exception("O campo \"numeroNF\" deve ter comprimento máximo de 200 caracter(es).");

                //Field Observacao
                //if (  fieldInfo.Observacao != string.Empty )
                //   if ( fieldInfo.Observacao.Trim().Length > 0  )
                //      throw new Exception("O campo \"Observacao\" deve ter comprimento máximo de 0 caracter(es).");

                ////Field ValorDesconto
                //if ( !( fieldInfo.ValorDesconto > 0 ) )
                //   throw new Exception("O campo \"ValorDesconto\" deve ser maior que zero.");

                ////Field ValorFrete
                //if ( !( fieldInfo.ValorFrete > 0 ) )
                //   throw new Exception("O campo \"ValorFrete\" deve ser maior que zero.");

                return true;

            }
            catch (Exception e)
            {
                this._ErrorMessage = e.Message;
                return false;
            }
        }