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
ASP.NET 2.0 / 3.5 / 4.0
Errore importazione csv to database/gridview
martedì 17 gennaio 2012 - 14.27
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
Elenco Tags
VB.NET
|
.NET 4.0
|
Windows Server 2003
|
Visual Studio Express
|
SQL Server 2000
matteoct
Profilo
| Junior Member
51
messaggi | Data Invio:
mar 17 gen 2012 - 14:27
1658_err_csv_to_gridview.zip
Salve, ho la necessità di importare i dati contenuti in un file *.csv al database, ovvero mostrarli a video tramite gridview.
Ho trovato numerose risorse in rete e, utilizzando Visual Web Developers 2010 Express, funziona tutto benissimo; inoltre sono riuscito ad adattare il codice reperito alle mie esigenze.
Il problema è sorto dopo la pubblicazione sul server di produzione, che si trova su una intranet, ed utilizza come sistema operativo W 2003 SP2 - SQL 2000.
Sostanzialmente il codice che ho reperito svolge le seguenti operazioni:
1.upload del file csv
2.lettura dei dati dal file caricato
3.creazione del datatable
4.inserimento dei dati caricati in memoria nel db
Quando effettuo ciò dalla rete aziendale invece, dopo aver eseguito l’upload del file mi viene segnalato l’errore:
“Column 'Nome' does not belong to table”
Dove ‘Nome’ dovrebbe essere la prima Colonna del datatable.
Il file viene correttamente scritto/caricato nella directory dell’applicazione.
Ho inserito quindi un gridview e, dopo la lettura dei dati dal file csv, lo popolo con il datatable.
Il gridview effettivamente contiene i dati prelevati dal file csv che ho selezionato, ma non le colonne, e mi viene mostrato a video in maniera disordinata; tra una parole e l’altra, che dovrebbero corrispondere ai nomi delle colonne, c’è la virgola, cioè come se il codice non intrerpretasse la virgola come delimitatore, cosa che invece non accade quando utilizzo Visual Web Developers 2010 Express, in quanto, oltre ad importare correttamente i dati nel Db, il gridview viene mostrato correttamente.
Ieri ho trovato anche il semplicissimo codice incluso nella cartella "esempio_2", che sostanzialmente carica un file csv. e popola un gridview; anche in questo caso con Visual Web Developers 2010 Express funziona benissimo e con il server di produzione no, cioè il gridview non viene caricato e restituisce questo errore:
Could not find a part of the path 'C:\Users\XXXXXXXX\Desktop\GridViewExport.csv'.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
Exception Details: System.IO.DirectoryNotFoundException: Could not find a part of the path 'C:\Users\XXXXXXXX\Desktop\GridViewExport.csv'.
Source Error:
Line 19: Private Function ReadToEnd(filePath As String) As Object
Line 20: Dim dtDataSource As New DataTable()
Line 21: Dim fileContent As String() = File.ReadAllLines(filePath)
Line 22: ' Dim fileContent As String() = File.ReadAllLines(Server.MapPath(""))
Line 23: If fileContent.Count() > 0 Then
Source File: C:\Documents and Settings\Administrator\Desktop\Scadenzario\rubrica\test.aspx.vb Line: 21
Il codice utilizzato e due immagini che riassumono l'errore nella creazione del gridview sono inclusi nel file allegato
Grazie
alexmed
Profilo
| Guru
1.186
messaggi | Data Invio:
mar 17 gen 2012 - 15:55
Ciao
Dal codice sembra che tenti di leggere il file direttamente dalla posizione originale (ovvero il tuo hard disk).
Prova a copiarlo nel in una cartella del server .
Ciao
alexmed
matteoct
Profilo
| Junior Member
51
messaggi | Data Invio:
mar 17 gen 2012 - 17:27
Ciao alexmed e grazie per la risposta.
Effettivamente, vedendo il secondo esempio, il file viene letto dal client, ma nel primo esempio invece, il file viene correttamente "caricato" nella cartella sul server, lo vedo fisicamente che viene scritto, ma poi il codice non viene eseguito correttamente; ciò è riscontrabile confrontando le due immagini incluse nel file .zip che ho allegato prima, in quanto si nota la differenza dei gridview che vengono generati. Nel caso in cui si verifica l'errore, il gridview viene creato con una sola colonna e i nomi sono separati dalla virgola, cosa che non dovrebbe accadere.
Ciao e ancora grazie
alexmed
Profilo
| Guru
1.186
messaggi | Data Invio:
mar 17 gen 2012 - 19:01
Ciao
Solo una cosa prima di fare delle prove: hai provato a cambiare il separatore? Prova da "," a ";"
alexmed
matteoct
Profilo
| Junior Member
51
messaggi | Data Invio:
mar 17 gen 2012 - 21:08
Si, già fatto; l'ho cambiato sia nel codice, sia nel file csv.
grazie
matteoct
Profilo
| Junior Member
51
messaggi | Data Invio:
mer 18 gen 2012 - 11:25
Ho risolto il mistero;
l'errore era causato dalle differenti impostazioni internazionali tra i due SO utilizzati e il delimitatore predefinito nella chiave di registro del W 2003, utilizzato in azienda, è il ';' punto e virgola e non ',' la virgola.
Praticamente il delimitatore scritto nel codice che riporto sotto viene completamente ignorato e viene considerato solo il valore indicato nella chiave di registro; è bastato sostituirlo ed ha funzionato tutto (cioè nel codice potete inserire quello che volete, punto, virgola, punto e virgola, etc ma non verrà considerato):
strConnString = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & Server.MapPath(strPath) & _
";Extended Properties='TEXT;HDR=Yes;FMT=Delimited;Format=Delimited(,)'"
La chiave in questione è (come riportato qui:
http://www.connectionstrings.com/textfile#p20
):
The delimiter can be specified in the registry at the following location:<br/> HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Jet \ 4.0 \ Engines \ Text <br/> "Format" = "TabDelimited"<br/> or<br/> "Format" = "Delimited(;)"<br/>
La dritta giusta l'ho trovata qui:
http://forum.aspitalia.com/forum/post/353671/File-CSV-OleDB.aspx
Grazie alexmed per l'interessamento
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 !