Programma di lettura da database access tramite oledb e visual c# wind...

giovedì 08 ottobre 2009 - 10.31

ANDREAR12 Profilo | Newbie

Salve sono giorni che quando vado a compilare mi da la seguente eccezione: "Tipi di dati non corrispondenti nell'espressione criterio.", oledbexception.

il codice che mi da problemi è il seguente:
private void button2_Click(object sender, EventArgs e)
{

if (dt2 == null)
{
dt2 = DateTime.Now.AddDays(-1);
}

listBox1.Items.Clear();
listBox2.Items.Clear();
listBox3.Items.Clear();
listBox4.Items.Clear();
listBox5.Items.Clear();
listBox6.Items.Clear();
string source1 = GB.geb;
DateTime dt4 = new DateTime();
dt4 = DateTime.Now;
OleDbConnection oleconn2 = new OleDbConnection(source1);
string command8 = "SELECT * FROM Tbar WHERE GIORNO >= '" + dt2.ToString() + "' AND GIORNO <='" + dt4.ToString() + "'";
oleconn2.Open();
OleDbDataAdapter da = new OleDbDataAdapter(command8, oleconn2);

DataSet ds = new DataSet();
int pippo = da.Fill(ds, "Tbar");
DataRowCollection rr = ds.Tables["Tbar"].Rows;
int count12 = ds.Tables["Tbar"].Rows.Count;
if (count12 > 0)
{
for (int i = 0; i < count12; i++)
{
listBox2.Items.Add(rr[i].ItemArray[0].ToString());


}
}
oleconn2.Close();
}

Datemi una mano che non so come uscirne fuori da questo problema.

Andrea.

fabio1985 Profilo | Newbie

ciao ANDREA12 dando una lettura veloce al codice sembra che l'errore avvenga durante la SELECT dei dati in corrispondenza di un valore di tipo datetime, effettui un cast del datetime in stringa ma nel database effetivamente esiste un datetime (e quindi dovresti rieffettuare una convert della data ma col formato corretto) di conseguenza a mio avviso il codice dovrebbe essere cambiato in questo:

string command8 = "SELECT * FROM Tbar WHERE GIORNO >= Convert(DateTime,'" + dt2.ToString("dd/MM/yyyy") + "', 105) AND GIORNO <= Convert(DateTime,'" + dt4.ToString("dd/MM/yyyy") + "', 105)";


dove nella conversione in stringa .toString(""dd/MM/yyyy"") <-- vai a specificare il tipo di formato e con la clausola CONVERT all'interno della select riconverte il valore in DateTime...

prova e fammi sapere se va bene

ANDREAR12 Profilo | Newbie

mi da errore di compilazione.
l'eccezione me la da anche se scrivo:
string command8 = "SELECT * FROM Tbar WHERE GIORNO >= '" + dt2 + "' AND GIORNO <='" + dt4 + "'";

dove dt2 e dt4 sono oggetti DateTime.

Andrea.

fabio1985 Profilo | Newbie

hai provato ad inserire la stringa che ti ho scritto sopra?

ANDREAR12 Profilo | Newbie

si ma da sempre l'eccezione, dicendo che convert non esiste nel contesto.


vi prego aiutatemi!!!

Andrea.

fabio1985 Profilo | Newbie

il progettino potresti passarmelo?

alexmed Profilo | Guru

Ciao
mi sà che l'errore è dovuto all'uso degli apici.

Per le date devi usare il cancelletto


string command8 = "SELECT * FROM Tbar WHERE GIORNO >= '" + dt2.ToString() + "' AND GIORNO <='" + dt4.ToString() + "'";

string command8 = "SELECT * FROM Tbar WHERE GIORNO >= #" + dt2 + "# AND GIORNO <= #" + dt4 + "#";


Ciao


alexmed

ANDREAR12 Profilo | Newbie

Ciao.

Non da più l'eccezione ma non mi popola l'oggetto DataRowCollection rr = ds.Tables["Tbar"].Rows;



Andrea.

ANDREAR12 Profilo | Newbie

se mi mandi l'email te lo mando.

Andrea.

fabio1985 Profilo | Newbie

ok mandalo a m1h4wk@hotmail.com

ciao

fabio1985 Profilo | Newbie

ok ho visionato il progetto cmq ti consiglio di tanto in tanto di inserire qualche commento ... innazitutto non sono riuscito a capire del tutto il funzioanmento per via della fretta e per via magari del fatto che non ne conosco il meccanismo però per quanto riguarda ... l'errore la prima soluzione che ti avevo dato valeva nel caso in cui avessi un db sql però in questo caso ho visto che usi access quindi era giusta la soluzione di inserire "#" prima del valore anzichè l'apice... cmq al di là dell'errore di sintassi sembra anche che nel database tu abbia impostato un valore data utilizzato il formato data in cifre poichè utilizzi il datatimepicker ti converrebbe impostare nel db il formato data di tipo "01/01/2000" e poi estrarre dal datatime il formato ("dd/MM/yyyy") durante la select... spero di non aver sbagliato nel consigliarti vedi un pò
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5