PDA

View Full Version : [MySQL/VB.NET] Inserire un valore DateTime, errore!!!


race2
05-10-2004, 10:40
Con un semplice

OdbcCommand("INSERT INTO MyTable (CampoDateTime) VALUES('" & MiaDateTime & "') ", oConn)

non riesco ad inserire il valore DateTime in un Database MySQL che ha come formato: yyyy-mm-dd hh.mm.ss

mi inserisce tutti 0000-00-00 00.00.00

come mai ???

maxnaldo
05-10-2004, 11:03
la insert dovrebbe avere la data e ora nel formato stringa così:

INSERT INTO MyTable (CampoDateTime) VALUES('2004-10-05 11:59:56')

sei sicuro che la variabile "MiaDateTime" sia una stringa di quel formato ?


se ti ritrovi il valore :0000-00-00 00.00.00
è perché quello è il valore predefinito per una DATETIME = Null

vuol dire che non gli piace quello che hai scritto nella INSERT

prova a stamparti in output la INSERT e controlla che contenga la data nel formato giusto.


:D

race2
05-10-2004, 11:21
Caspitaaaaa!!!

mi da :

gg/mm/aaaa h.m.s

conosci un comando di format oppure faccio con le SubString ???

maxnaldo
05-10-2004, 11:29
ESEMPIO:

MiaDateTime = Now()
DataFormatoMysql = Format(MiaDateTime, "yyyy-mm-dd hh:mm:ss")

OdbcCommand("INSERT INTO MyTable (CampoDateTime) VALUES('" & DataFormatoMysql & "') ", oConn)

race2
05-10-2004, 14:57
Ecco il mio codice:

Devo estrarre da un Database con 300 Tabelle nle quali contengono 500 record l'una tutti i dati e inserirli in un altro Database contenente le medesime tabelle vuote, ho cominciato con questa idea, ma mi da errore nella connessione

oComm2.Connection.Open()

dopo che ha effettuato il 30% del lavoro di trasferimento, come e' possibile , un sovraccarico di qualcosa ???

altrimenti per il funzionamento ora va .....

la data ho risolto come si vede.......



oConn1.Open()
Dim oComm1 As New OleDbCommand("SELECT * FROM " & TableName & "", oConn1)
Dim oRead1 As OleDbDataReader = oComm1.ExecuteReader
While oRead1.Read
If Not IsDBNull(oRead1("Campo")) Then Campo = oRead1("Campo")
If Not IsDBNull(oRead1("Campo")) Then Campo = oRead1("Campo")
If Not IsDBNull(oRead1("Campo")) Then Campo = oRead1("Campo")
If Not IsDBNull(oRead1("Campo")) Then Campo = oRead1("Campo")


Dim oComm2 As New OdbcCommand("INSERT INTO " & TableName & "(" & _
"Ora_Start_In," & _
"Ora_End_In," & _
"Ora_Start_Out," & _
"Ora_End_Out" & _
") VALUES(" & _
"'" & Campo & "'," & _
"'" & Campo.ToString("yyyy-MM-dd h:m:s") & "'," & _
"'" & Campo.ToString("yyyy-MM-dd h:m:s") & "'," & _
"'" & Campo.ToString("yyyy-MM-dd h:m:s") & "'," & _
"'" & Campo.ToString("yyyy-MM-dd h:m:s") & "'" & _
")", oConn2)
oComm2.Connection.Open()
oComm2.ExecuteNonQuery()
oComm2.Connection.Close()


End While
oConn1.Close()

maxnaldo
05-10-2004, 17:06
mi pare sia un po' pesantino come codice, chiudi la connessione ogni volta nella while ma la open della conn2 non l'hai fatta da nessuna parte...non so che driver ODBC stai usando ma prova a fare così:


//Connection string per MyODBC 2.50
/*string MyConString = "DRIVER={MySQL};" +
"SERVER=localhost;" +
"DATABASE=nomedatabase;" +
"UID=utente;" +
"PASSWORD=passw;" +
"OPTION=3";
*/
//Connection string per MyODBC 3.51
string MyConString = "DRIVER={MySQL ODBC 3.51 Driver};" +
"SERVER=localhost;" +
"DATABASE=nomedatabase;" +
"UID=utente;" +
"PASSWORD=passw;" +
"OPTION=3";


OdbcConnection MyConnection = new OdbcConnection(MyConString);
MyConnection.Open();

OdbcCommand MyCommand = new OdbcCommand("SELECT Campo FROM " & TableName,MyConnection);

OdbcDataReader MyDataReader;
MyDataReader = MyCommand.ExecuteReader();
while (MyDataReader.Read())
{
Campo=MyDataReader("Campo")
MyCommand.CommandText = "INSERT INTO " & TableName & "(" & _
"Ora_Start_In," & _
"Ora_End_In," & _
"Ora_Start_Out," & _
"Ora_End_Out" & _
") VALUES(" & _
"'" & Campo & "'," & _
"'" & Campo.ToString("yyyy-MM-dd h:m:s") & "'," & _
"'" & Campo.ToString("yyyy-MM-dd h:m:s") & "'," & _
"'" & Campo.ToString("yyyy-MM-dd h:m:s") & "'," & _
"'" & Campo.ToString("yyyy-MM-dd h:m:s") & "'" & _
")"
MyCommand.ExecuteNonQuery()
}

MyDataReader.Close();
MyConnection.Close();






ps. può darsi che questo codice ti generi qualche altro errore, non l'ho testato :D

race2
05-10-2004, 17:31
Non hai notato 2 cose..........

1) la oConn2 la apro cosi:

oComm2.Connection.Open()
oComm2.ExecuteNonQuery()
oComm2.Connection.Close()

2) devo prendere i dati da una macchina remota e trasferirli in una locale dove c'e' l'altro Database.

le mie connessioni le ho chiamate --> oConn1 e oConn2


oConn2 è verso il PC locale

oConn1 è verso il PC remoto

maxnaldo
06-10-2004, 09:11
si ma io dicevo la "oconn2" cioè la connessione, che nello script che hai postato non è aperta da nessuna parte, presumo tu l'abbia aperta prima.

oComm2 invece è l'OdbcCommand, non la connessione

ocomm2 è creato sulla base della connessione "oconn2" che non vedevo aperta, per quello ti ho detto che non mi tornava molto la cosa.

:D :D

race2
07-10-2004, 08:43
Originariamente inviato da maxnaldo
mi pare sia un po' pesantino come codice, chiudi la connessione ogni volta nella while ma la open della conn2 non l'hai fatta da nessuna parte...non so che driver ODBC stai usando ma prova a fare così:


//Connection string per MyODBC 2.50
/*string MyConString = "DRIVER={MySQL};" +
"SERVER=localhost;" +
"DATABASE=nomedatabase;" +
"UID=utente;" +
"PASSWORD=passw;" +
"OPTION=3";
*/
//Connection string per MyODBC 3.51
string MyConString = "DRIVER={MySQL ODBC 3.51 Driver};" +
"SERVER=localhost;" +
"DATABASE=nomedatabase;" +
"UID=utente;" +
"PASSWORD=passw;" +
"OPTION=3";


OdbcConnection MyConnection = new OdbcConnection(MyConString);
MyConnection.Open();

OdbcCommand MyCommand = new OdbcCommand("SELECT Campo FROM " & TableName,MyConnection);

OdbcDataReader MyDataReader;
MyDataReader = MyCommand.ExecuteReader();
while (MyDataReader.Read())
{
Campo=MyDataReader("Campo")
MyCommand.CommandText = "INSERT INTO " & TableName & "(" & _
"Ora_Start_In," & _
"Ora_End_In," & _
"Ora_Start_Out," & _
"Ora_End_Out" & _
") VALUES(" & _
"'" & Campo & "'," & _
"'" & Campo.ToString("yyyy-MM-dd h:m:s") & "'," & _
"'" & Campo.ToString("yyyy-MM-dd h:m:s") & "'," & _
"'" & Campo.ToString("yyyy-MM-dd h:m:s") & "'," & _
"'" & Campo.ToString("yyyy-MM-dd h:m:s") & "'" & _
")"
MyCommand.ExecuteNonQuery()
}

MyDataReader.Close();
MyConnection.Close();






ps. può darsi che questo codice ti generi qualche altro errore, non l'ho testato :D


è possibile modificare questo codice per potere inserire i dati in un Database diverso da quello dove li estraggo ???

maxnaldo
07-10-2004, 09:08
beh ti basta creare due connessioni e due OdbcCommand

il primo fa la select sul primo DB

il secondo fa gli inserimenti nel ciclo While.