Maledette date... # # oppure ' ' ???

mercoledì 22 dicembre 2004 - 16.46

Steve71 Profilo | Newbie

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

*****
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...
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-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5