Home Page
Articoli
Tips & Tricks
News
Forum
Archivio Forum
Blogs
Sondaggi
Rss
Video
Utenti
Chi Siamo
Contattaci
Username:
Password:
Login
Registrati ora!
Recupera Password
Home Page
Stanze Forum
SQL Server 2000/2005/2008, Express, Access, MySQL, Oracle
Maledette date... # # oppure ' ' ???
mercoledì 22 dicembre 2004 - 16.46
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
Steve71
Profilo
| Newbie
13
messaggi | Data Invio:
mer 22 dic 2004 - 16:46
Salve a tutti, vi descrivo la mia situazione attuale:
Ho sviluppato un WindowsService in VB.Net che legge i dati da alcuni file di testo CSV e li butta in un db SQL Server 2000. (Uhm, sintetico!)
Il tipo di dati è definito da una Struttura:
Public Structure UsageData
Dim Id As Int32
Dim IdDevice As Int32
Dim DateTime_EngineStart As Date
Dim DateTime_EngineShutdown As Date
Dim Route As Int32
End Structure
Un Tracciato Record contenuto nel file di testo è:
1;20/08/2004 19:47:08;20/08/2004 20:47:49;60
A) la Data originale è => 20/08/2004 19:47:08
Leggo correttamente i dati da file di testo CSV tramite OdbcConnection, poi durante il ciclo della DataTable inserisco i valori corretti nel tipo di dati UsageData
B) la Data diventa => #08/20/2004 7:47:08 PM#
Fin qui tutto ok, poi passo il tipo di dati ad una Sub che esegue una banale INSERT:
Dim sql As String
sql = "INSERT INTO Usages " & _
" (IdDevice, DateTime_EngineStart, DateTime_EngineShutdown, Route) " & _
" VALUES " & _
" (@IdDevice, @DateTime_EngineStart, @DateTime_EngineShutdown, @Route)"
Dim cmd As New SqlCommand(sql, cn)
cmd.Parameters.Add("@IdDevice", usage.IdDevice)
cmd.Parameters.Add("@DateTime_EngineStart", usage.DateTime_EngineStart)
cmd.Parameters.Add("@DateTime_EngineShutdown", usage.DateTime_EngineShutdown)
cmd.Parameters.Add("@Route", usage.Route)
cmd.ExecuteNonQuery()
La quale (giustamente) va in errore...
Eseguendo SQL Profiler scopro che sono proprio i campi "data" ad incasinare l'Insert e SQL Analyzer mi ha dato la riprova:
INSERT INTO Usages (IdDevice, DateTime_EngineStart, DateTime_EngineShutdown, Route)
VALUES (1, #08/20/2004 7:47:08 PM#, #08/20/2004 8:47:49 PM#, 60)
=
Server: Msg 128, Level 15, State 1, Line 4
The name '#08' is not permitted in this context. Only constants, expressions, or variables allowed here. Column names are not permitted.
Se però cambio A MANO i # con ' l'inserimento funziona perfettamente!
Ma cazzaròla, come faccio a dire al tipo di dato DateTime che deve scrivere l'apice al posto del cancelletto???
HELP!!!
Steve71
Profilo
| Newbie
13
messaggi | Data Invio:
mer 22 dic 2004 - 17:45
*****
MI sfugge il secondo passaggio nel senso fai un ciclo per inserire i dati nella struttura e ti te li restituisce in quel formato? mmm un pò strano
*****
Eppure è così... la Function che uso per la lettura della data è:
Public Shared Function DateAndTime(ByVal inputDateTime As String) As DateTime
' IN: 20/08/2004 19:47:08 (formato italiano)
Dim inDay As String = inputDateTime.Substring(0, 2)
Dim inMonth As String = inputDateTime.Substring(3, 2)
Dim inYear As String = inputDateTime.Substring(6, 4)
Dim inTime As String = inputDateTime.Substring(11, 8)
' OUT: 2004-08-20 19:47:08 (formato ODBC Standard)
Dim outDateTime As DateTime = inYear & "-" & inMonth & "-" & inDay & " " & inTime
Return outDateTime
End Function
Io le passo [ 20/08/2004 19:47:08 ]
ma invece di [ 2004-08-20 19:47:08 ] come vorrei,
mi restituisce [ #2004/08/20 7:47:08.000PM ]
*****
Prima cosa non usare le strutture ma usa i campi o le proprietà
*****
Cioè?
A me hanno insegnato ad usare le Strutture per trattare i tipi di dati e finora mi ci sono trovato molto bene, ma se ci sono modi migliori...
*****
secondo utilizza la formattazione del tostring
*****
Ho provato sia tipodati.data.ToString() che Convert.ToString(tipodati.data) ma non cambia nulla...
Torna su
Stanze Forum
Elenco Threads
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 !