Usuário com melhor resposta
É errado fazer varias consultas em um banco de dados access pois a consulta não retorna o que eu quero

Pergunta
-
É errado a rotina que estou tentando implementar?
pois de maneira nenhuma retorna o que eu estou querendo.
for (int i = 1; i <= variavel; i++) { int cont = 0; DateTime dataposterior = DateTime.Today, dataanterior = DateTime.Today; dataanterior = dataanterior.AddMonths(-i); dataposterior = dataposterior.AddMonths(-(i - 1)); con.Open(); cmd = new OleDbCommand("SELECT HistSaida.dataHistSaida, HistSaida.idProdutoHistSaida, HistSaida.qtdHistSaida FROM HistSaida WHERE (((HistSaida.dataHistSaida) BETWEEN #" + dataanterior + "# AND #" + dataposterior + "#) AND idProdutoHistSaida = " + idProduto + ")", con); dr = cmd.ExecuteReader(); if (dr.HasRows) { while (dr.Read()) { Demanda = Demanda + Convert.ToInt32(dr["qtdHistSaida"]); cont = 1; } } dr.Close(); con.Close(); Valordivisao = Valordivisao + cont; }
- Editado Adriano_Abacherly sexta-feira, 6 de setembro de 2013 05:26
Respostas
-
Obrigado pelo ajuda fiz desse jeito não sei se é o mais correto mais está funcionando.
for (int i = 0; i <= MesesDemanda; i++) { int cont = 0; DateTime dataposterior = DateTime.Now, dataanterior = DateTime.Now; con.Open(); cmd = new OleDbCommand("SELECT SUM(qtdHistSaida) FROM HistSaida WHERE " + "((HistSaida.dataHistSaida >=? AND HistSaida.dataHistSaida <= ?) AND idProdutoHistSaida = ?)", con); cmd.Parameters.AddWithValue("@p1", Convert.ToString(dataanterior.AddMonths(-(i + 1)))); cmd.Parameters.AddWithValue("@p2", Convert.ToString(dataposterior.AddMonths(-i))); cmd.Parameters.AddWithValue("@p3", idProduto); var result = cmd.ExecuteScalar(); if (result != System.DBNull.Value) { Demanda = Demanda + Convert.ToUInt32(result); cont = 1; } dr.Close(); con.Close(); Valordivisao = Valordivisao + cont; }
- Marcado como Resposta Adriano_Abacherly terça-feira, 10 de setembro de 2013 07:24
-
Obrigado pelo ajuda fiz desse jeito não sei se é o mais correto mais está funcionando.
for (int i = 0; i <= MesesDemanda; i++) { int cont = 0; DateTime dataposterior = DateTime.Now, dataanterior = DateTime.Now; con.Open(); cmd = new OleDbCommand("SELECT SUM(qtdHistSaida) FROM HistSaida WHERE " + "((HistSaida.dataHistSaida >=? AND HistSaida.dataHistSaida <= ?) AND idProdutoHistSaida = ?)", con); cmd.Parameters.AddWithValue("@p1", Convert.ToString(dataanterior.AddMonths(-(i + 1)))); cmd.Parameters.AddWithValue("@p2", Convert.ToString(dataposterior.AddMonths(-i))); cmd.Parameters.AddWithValue("@p3", idProduto); var result = cmd.ExecuteScalar(); if (result != System.DBNull.Value) { Demanda = Demanda + Convert.ToUInt32(result); cont = 1; } dr.Close(); con.Close(); Valordivisao = Valordivisao + cont; }
Mas, se ta rolando do jeito que você falo confirma esse post como reposta e sempre faça assim!cmd.Parameters.AddWithValue("@p1", Convert.ToString(dataanterior.AddMonths(-(i + 1))));
não precisa colocar Convert porque ele recebe objeto! mas, se você fez assim ta certo
a outra forma é Add("@P1", OleDbType.Date).value = dataanterior.AddMonths(-(i + 1))
Fúlvio Cezar Canducci Dias- Editado Fulvio Cezar Canducci Dias terça-feira, 10 de setembro de 2013 13:21
- Marcado como Resposta Adriano_Abacherly quarta-feira, 11 de setembro de 2013 06:25
Todas as Respostas
-
-
-
Vou te dar uma dica que eu vejo todo mundo fazendo errado e não sei o porque disso!
Quando trabalhamos com desenvolvimento e acessamos tabelas de qualquer banco utiliza-se a classe por completo e todos seus recursos
Veja!
Coloque o cmd.Paramenters.Add(, porque ele faz o converte necessário para suas variáveis dinâmicas da sua SQL não passe direto porque é isso que faz ele não trazer o resultado correto!
using ( OleDbConnection conn = new OleDbConnection( cstr ) ) { conn.Open(); string selstr = "select firstName from Employee where lastname = ?"; OleDbCommand cmd = new OleDbCommand( selstr, conn ); OleDbParameter name = cmd.Parameters.Add( "@name", OleDbType.VarChar, 15 ); name.Value = "Tang"; OleDbDataReader rdr = cmd.ExecuteReader(); if ( rdr.Read() ) { Console.WriteLine(rdr.GetString( 0 ) ); } else { Console.WriteLine(" is not available yet" ); } }
O Exemplo logo acima tem inclusive o tipo VarChar mas, ali se pode colocar o tipo DateTime, Date e por ai !
Essa acho eu que trará seu dados certinho!
Fúlvio Cezar Canducci Dias- Sugerido como Resposta Fulvio Cezar Canducci Dias sábado, 7 de setembro de 2013 13:52
-
Desculpa... não estou entendendo direito. Como eu faria então a consulta?
SELECT HistSaida.dataHistSaida, HistSaida.idProdutoHistSaida, HistSaida.qtdHistSaida FROM HistSaida WHERE (((HistSaida.dataHistSaida) BETWEEN #" + dataanterior + "# AND #" + dataposterior + "#) AND idProdutoHistSaida = "idProduto";
-
Desculpa... não estou entendendo direito. Como eu faria então a consulta?
SELECT HistSaida.dataHistSaida, HistSaida.idProdutoHistSaida, HistSaida.qtdHistSaida FROM HistSaida WHERE (((HistSaida.dataHistSaida) BETWEEN #" + dataanterior + "# AND #" + dataposterior + "#) AND idProdutoHistSaida = "idProduto";
Leia?
http://msdn.microsoft.com/pt-br/library/system.data.oledb.oledbcommand.parameters(v=vs.90).aspx
Fúlvio Cezar Canducci Dias -
Obrigado pelo ajuda fiz desse jeito não sei se é o mais correto mais está funcionando.
for (int i = 0; i <= MesesDemanda; i++) { int cont = 0; DateTime dataposterior = DateTime.Now, dataanterior = DateTime.Now; con.Open(); cmd = new OleDbCommand("SELECT SUM(qtdHistSaida) FROM HistSaida WHERE " + "((HistSaida.dataHistSaida >=? AND HistSaida.dataHistSaida <= ?) AND idProdutoHistSaida = ?)", con); cmd.Parameters.AddWithValue("@p1", Convert.ToString(dataanterior.AddMonths(-(i + 1)))); cmd.Parameters.AddWithValue("@p2", Convert.ToString(dataposterior.AddMonths(-i))); cmd.Parameters.AddWithValue("@p3", idProduto); var result = cmd.ExecuteScalar(); if (result != System.DBNull.Value) { Demanda = Demanda + Convert.ToUInt32(result); cont = 1; } dr.Close(); con.Close(); Valordivisao = Valordivisao + cont; }
- Marcado como Resposta Adriano_Abacherly terça-feira, 10 de setembro de 2013 07:24
-
Obrigado pelo ajuda fiz desse jeito não sei se é o mais correto mais está funcionando.
for (int i = 0; i <= MesesDemanda; i++) { int cont = 0; DateTime dataposterior = DateTime.Now, dataanterior = DateTime.Now; con.Open(); cmd = new OleDbCommand("SELECT SUM(qtdHistSaida) FROM HistSaida WHERE " + "((HistSaida.dataHistSaida >=? AND HistSaida.dataHistSaida <= ?) AND idProdutoHistSaida = ?)", con); cmd.Parameters.AddWithValue("@p1", Convert.ToString(dataanterior.AddMonths(-(i + 1)))); cmd.Parameters.AddWithValue("@p2", Convert.ToString(dataposterior.AddMonths(-i))); cmd.Parameters.AddWithValue("@p3", idProduto); var result = cmd.ExecuteScalar(); if (result != System.DBNull.Value) { Demanda = Demanda + Convert.ToUInt32(result); cont = 1; } dr.Close(); con.Close(); Valordivisao = Valordivisao + cont; }
Mas, se ta rolando do jeito que você falo confirma esse post como reposta e sempre faça assim!cmd.Parameters.AddWithValue("@p1", Convert.ToString(dataanterior.AddMonths(-(i + 1))));
não precisa colocar Convert porque ele recebe objeto! mas, se você fez assim ta certo
a outra forma é Add("@P1", OleDbType.Date).value = dataanterior.AddMonths(-(i + 1))
Fúlvio Cezar Canducci Dias- Editado Fulvio Cezar Canducci Dias terça-feira, 10 de setembro de 2013 13:21
- Marcado como Resposta Adriano_Abacherly quarta-feira, 11 de setembro de 2013 06:25