Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 15
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2013
    Messaggi
    138

    [vb express 2008] scrivere risultato query dentro un file di testo

    uso un database access e per interrogarlo ADO.net. ho fatto un query che interroga il DB ma non so come scrivere il risultato dentro un file di testo.. ho provato con streamwrite writer ma non ci sono riuscito... qualche suggerimento?

  2. #2
    fa' vedere quello che hai fatto

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2013
    Messaggi
    138
    codice:
    archivio.Open()
            Dim modificadata1 As New System.DateTime(DateTimePicker1.Value.Ticks)
            Dim ricerca As New OleDb.OleDbCommand("SELECT Cli_For_Neg FROM Movimenti WHERE Data = @valore1", archivio)
            ricerca.Parameters.Add("@valore1", OleDbType.Date).Value = modificadata1.ToShortDateString
            ricerca.ExecuteNonQuery()
            Dim dataadapter As New OleDb.OleDbDataAdapter(ricerca)
            Dim data As New DataTable
            dataadapter.Fill(data)
            Dim scrive As New StreamWriter("C:\Amico\Dati.txt")
            scrive.Write(ricerca)
    
    
            archivio.Close()
            scrive.Close()
    non mi da nessun errore ma al posto del risultato della query nel file di testo mi scrive "System.Data.OleDb.OleDbCommand"

  4. #4
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    237
    Ciao...
    Quello che intendi fare non è così scontato: vuoi convertire un oggetto datatable in un file di testo..
    Devi scrivere del codice tu, che a partire dalla tabella la ricrei come flusso di caratteri.
    Potresti partire con separare ogni colonna col carattere tab e per ogni riga vai a capo.
    Se il tuo obiettivo è quello di ottenere un file txt "in chiaro" il procedimento in generale è questo. Se invece a te serve solo salvare una copia del datatable da poterla ricaricare successivamente (anche se non ha molto senso) cerca processi di serializzazione di oggetti.

  5. #5
    Utente di HTML.it
    Registrato dal
    Jun 2013
    Messaggi
    138
    e quindi gli argomenti da toccare per fare ciò quali sono ?

  6. #6
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    237
    Una veloce e sana ricerca su google?
    Ecco cosa ho trovato io, in 0.3 secondi.

    codice:
    Public Sub DataTableToTextFile(dtToText As DataTable, filePath As String)
    	Dim i As Integer = 0
    	Dim sw As StreamWriter = Nothing
    	Try
    		sw = New StreamWriter(filePath, False)
    		'For ColumnName's 
    
    		For i = 0 To dtToText.Columns.Count - 2
    			sw.Write(dtToText.Columns(i).ColumnName)
    		Next
    		sw.Write(dt.Columns(i).ColumnName)
    		sw.WriteLine()
    		'For Data in the Rows
    
    		For Each row As DataRow In dtToText.Rows
    			Dim array As Object() = row.ItemArray
    			For i = 0 To array.Length - 2
    				sw.Write(array(i).ToString())
    			Next
    			sw.Write(array(i).ToString())
    			sw.WriteLine()
    		Next
    		sw.Close()
    	Catch ex As Exception
    		Response.Write("")
    	End Try
    End Sub
    Non l'ho provato ma è facile intuirne il funzionamento.
    Nel primo ciclo ti scrive il nome, l'intestazione della colonna.
    Poi passa a scriverti le righe una alla volta.
    Sto codice si può anche migliorare un po'.. Tipo, potresti pensare di usare lo stringbuilder per creare lo stream di caratteri che poi salvi tutto in una volta. Ne migliorerebbero le prestazioni. Poi non capisco perchè fa uscire il ciclo a -1 elemento dalla fine per scriverlo da solo la riga dopo.. Bisogna provarlo. Altra correzione: usare gli array di object generici così non è che mi inspiri molto, perchè i cast li fa lui implicitamente..
    Facci sapere

  7. #7
    Utente di HTML.it
    Registrato dal
    Jun 2013
    Messaggi
    138
    grazie sono riuscito nel mio intento in questa maniera:
    codice:
    Dim dataadapter As New OleDb.OleDbDataAdapter(ricerca)
            Dim dataset As New DataSet
            dataadapter.Fill(dataset, "Movimenti")
            Dim table As DataTable = dataset.Tables("Movimenti")
            Dim lettura_tabella_del_dataset() As DataRow = table.Select()
            Dim numero As Integer
    
            For numero = 0 To lettura_tabella_del_dataset.GetUpperBound(0)
                FileOpen(1, "C:\Amico\dati.txt", OpenMode.Append)
                Print(1, lettura_tabella_del_dataset(numero)("Cli_For_Neg"), SPC(3))
                Print(1, lettura_tabella_del_dataset(numero)("Data"), SPC(3))
                Print(1, lettura_tabella_del_dataset(numero)("Ora"), SPC(3))
                Print(1, lettura_tabella_del_dataset(numero)("Numcassa"), SPC(3))
                Print(1, lettura_tabella_del_dataset(numero)("Numdoc"), SPC(3))
                Print(1, lettura_tabella_del_dataset(numero)("PrezzoVendita"), vbCrLf)
    
                FileClose()
    
            Next numero
    ora vorrei però che il datarow oppure anche la query scrivesse soltanto se un determinato compo fosse riempito da numeri mentre se ci fossero dei caratteri saltasse quest'ultimo e scrivesse soltanto gli altri.. è possibile ?

  8. #8
    usa la funzione IsNumeric

  9. #9
    Utente di HTML.it
    Registrato dal
    Jun 2013
    Messaggi
    138
    codice:
     If IsNumeric(lettura_tabella_del_dataset) = False Then
                For numero = 0 To lettura_tabella_del_dataset.GetUpperBound(0)
                    FileOpen(1, "C:\Amico\dati.txt", OpenMode.Append)
                    Print(1, Format(lettura_tabella_del_dataset(numero)("Data"), "yyyy/MM/dd"), SPC(3))
                    Print(1, lettura_tabella_del_dataset(numero)("Ora"), SPC(3))
                    Print(1, lettura_tabella_del_dataset(numero)("Numcassa"), SPC(3))
                    Print(1, lettura_tabella_del_dataset(numero)("Numdoc"), SPC(3))
                    Print(1, lettura_tabella_del_dataset(numero)("PrezzoVendita"), vbCrLf)
    
                    FileClose()
    
                Next numero
            Else
                For numero = 0 To lettura_tabella_del_dataset.GetUpperBound(0)
                    FileOpen(1, "C:\Amico\dati.txt", OpenMode.Append)
                    Print(1, lettura_tabella_del_dataset(numero)("Cli_For_Neg"), SPC(3))
                    Print(1, Format(lettura_tabella_del_dataset(numero)("Data"), "yyyy/MM/dd"), SPC(3))
                    Print(1, lettura_tabella_del_dataset(numero)("Ora"), SPC(3))
                    Print(1, lettura_tabella_del_dataset(numero)("Numcassa"), SPC(3))
                    Print(1, lettura_tabella_del_dataset(numero)("Numdoc"), SPC(3))
                    Print(1, lettura_tabella_del_dataset(numero)("PrezzoVendita"), vbCrLf)
    
                    FileClose()
    
                Next numero
            End If
    fatto così ma mi salta il campo anche quando c'è il numero..

  10. #10
    francolino, a volte mi perplimi Ragiona prima di fare le cose

    vuoi scrivere UN SINGOLO campo solo se è numerico? DENTRO al ciclo FOR...NEXT testa QUEL SINGOLO campo e decidi se scriverlo

    dai che ce la fai!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.