Usuário com melhor resposta
Soma de uma coluna no BD filtrando por datas.

Pergunta
-
Buenas Galera estou com um probleminha. Tenho um sistema de controle financeiro tenho cadastros e lançamentos.
Tem uma parte onde eu pego os valores lançados e somo em um determinado período tem uma coluna chamada VPDECIMA, Data_Pag, EntradaDeb ou Cred.
A intenção é separar o que é debito e credito somar e jogar para label Credito e Debito, eu fiz assim:
private void button1_Click(object sender, EventArgs e) { SqlConnection conectar = new SqlConnection(@"Data Source=.\MSQLExpress;Initial Catalog=Login;Integrated Security=True"); conectar.Open(); SqlCommand comandos = conectar.CreateCommand(); comandos.CommandText = ("select VPDECIMAL FROM LANÇAMENTO WHERE DEB_CRED = Credito, Data_Pag BETWEEN '" + Convert.ToDateTime(Date1.Text) + "' and Data_Pag '" + Convert.ToDateTime(Date2.Text) + "'"); DataTable dt = new DataTable(); SqlDataAdapter adapter = new SqlDataAdapter(); adapter.SelectCommand = comandos; adapter.Fill(dt); object ob = dt.Compute("Sum(VPDECIMAL)", ""); decimal dc = new decimal(); dc = Convert.ToDecimal(ob); label3.Text = (dc.ToString("C")); }
Só que está me ocorrendo erro na hora da execução syntax Near ','.
Já quebrei a cabeça tentando fazer isso funcionar.
Eu tenho uma classe chamada sisLAN onde executo o metodo mas não achei jeito de fazer o metodo lá e jogar numa string e no form fazer seleção de datas e jogar no meu form.
Esse sistema de pesquisa está funcionando. No meu form:
sisLAN obj = new sisLAN(); string sql; if (rNameFat.Checked) { sql = "SELECT [ID_LANÇAMENTO] AS [Codigo], [DEB_CRED] AS [Tipo de Baixa], [COD_FOR_CLI], [FORNEC_CLIENTE], [CNPJ], [IE] AS [Insc. Estadual], [DP], [FP] AS [Forma de Pag.], [Q_PARC] AS [Qt de Parc], [NF] AS [Nota Fiscal], [VT] AS [Valor Total], [DATA_EMISSAO] AS [Data Emisão], [VP] AS [Valor da Parc.], [N_PARC] AS [N° da Parc.], [DATA_PAG] AS [Data Pag.], [OBS] as [Obs] FROM LANÇAMENTO WHERE NF LIKE @VALOR"; dgpesqFat.DataSource = obj.Pesquisar(sql, "%" + tb_pesqFat.Text + "%", DateTime.Today, DateTime.Today); } else { sql = "SELECT [ID_LANÇAMENTO] AS [Codigo], [DEB_CRED] AS [Tipo de Baixa], [COD_FOR_CLI], [FORNEC_CLIENTE], [CNPJ], [IE] AS [Insc. Estadual], [DP], [FP] AS [Forma de Pag.], [Q_PARC] AS [Qt de Parc], [NF] AS [Nota Fiscal], [VT] AS [Valor Total], [DATA_EMISSAO] AS [Data Emisão], [VP] AS [Valor da Parc.], [N_PARC] AS [N° da Parc.], [DATA_PAG] AS [Data Pag.], [OBS] as [Obs] FROM LANÇAMENTO WHERE DATA_PAG BETWEEN @Date1 AND @Date2"; dgpesqFat.DataSource = obj.Pesquisar(sql, String.Empty, DateTime.Parse(dt_inicio.Text), DateTime.Parse(dt_final.Text)); }
Na minha Classe:
public DataTable Pesquisar(string sql, string param, DateTime paramD1, DateTime paramD2)//Pesquisar Contas a Pagar { this.vsql = sql; SqlCommand objcmd = null; if (this.conectar()) { try { objcmd = new SqlCommand(vsql, objCon); objcmd.Parameters.Add(new SqlParameter("VALOR", param)); objcmd.Parameters.AddWithValue("@Date1", paramD1); objcmd.Parameters.AddWithValue("@Date2", paramD2); SqlDataAdapter adp = new SqlDataAdapter(objcmd); DataTable dt = new DataTable(); adp.Fill(dt); return dt; } catch (SqlException sqlerror) { throw sqlerror; } finally { this.desconectar(); } } else { return null; } }
Queria manter esse sistema mais eu não consigo.
Respostas
-
Olá Fernando
Seu problema esta no Where, você colocou uma "," e no where usamos o "AND" e faltou um " ' " no filtro com texto.
comandos.CommandText = ("select VPDECIMAL FROM LANÇAMENTO WHERE DEB_CRED = Credito, Data_Pag BETWEEN '" + Convert.ToDateTime(Da
O correto seria
comandos.CommandText = ("select VPDECIMAL FROM LANÇAMENTO WHERE DEB_CRED = 'Credito' AND Data_Pag BETWEEN '" + Convert.ToDateTime(Date1.Text) + "' and Data_Pag '" + Convert.ToDateTime(Date2.Text) + "'");
Att.
Marcelo Fernandes
MCP, MCDBA, MCSA, MCTS.
Se útil, classifique!!!
Me siga no twitter: @marcelodba- Editado Marcelo Fernandes da SilvaMVP, Moderator segunda-feira, 14 de janeiro de 2013 09:29
- Sugerido como Resposta Roberson Naves segunda-feira, 14 de janeiro de 2013 11:21
- Marcado como Resposta Ricardo Russo segunda-feira, 21 de janeiro de 2013 12:36