Announcement

Collapse
No announcement yet.

VB.NET SQL Query to File

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • VB.NET SQL Query to File

    Hey,
    ich baue eine SQL Verbindung auf, und frage anschließend mit einem Query eine DB ab.
    Davor lasse ich ein Textfile mit dem aktuellen Timestamp erstellen (soweit funktiert alles).
    Jetzt soll aber das Ergebnis des Query in die Textdatei geschrieben werden, mein Ansatz sieht bislang so aus:

    Code:
    Private Sub SqlCon()
            Dim fso = CreateObject("Scripting.FileSystemObject")
            Dim MyFile = fso.CreateTextFile("\\FILESERVER\Logs\" & Date.Today & "-" & TimeOfDay.Hour & "-" & TimeOfDay.Minute & ".txt", True)
            Dim connString As String = "CONNECTION STRING HERE"
            Dim conn As New SqlConnection(connString)
            conn.Open()
            Dim cmdString As String = "SELECT * FROM BLABLA"
            Dim cmd As New SqlCommand(cmdString, conn)
            Dim reader As SqlDataReader = cmd.ExecuteReader()
    
            'Hier eine Schleife mit der die Ergebnisse in die Textdatei geschrieben wird, aber wie?
            MyFile.Writeline(reader.Item("SPALTE HIER")) 'wie mach ich das?
            'Ergebnisse in Textfile Ende 
    
        End Sub

    Gruß

  • #2
    Hallo,

    schau doch in die SDK-Doku und übernimm die passenden Beispiele:

    Zum SqlReader
    Code:
           Dim reader As SqlDataReader = command.ExecuteReader()
    
            ' Call Read before accessing data.
            While reader.Read()
                Console.WriteLine(String.Format("{0}, {1}", _
                    reader(0), reader(1)))
            End While
    
            ' Call Close when done reading. - NICHT VERGESSEN
            reader.Close()
    Wie die einzelnen Zeilen aussehen sollen, musst Du natürlich noch festlegen. Dazu bietet sich in erster Linie String.Format an; aber Du kannst es auch über einen StringBuilder manuell zusammensetzen.

    Übrigens: Für das Zusammensetzen von Dateinamen ist Path.Combine() zu empfehlen. Wenn der CommandText komplexer wird, solltest Du unbedingt SqlCommand.Parameters verwenden.

    Jürgen

    Comment


    • #3
      RE

      Hey danke für deine Hilfe, jedoch hilft es mir grad nicht weiter.
      So konnte ich das damals in VBScript realisieren:

      Code:
      set recordset=command.execute
      
      Do Until recordset.EOF	
            output = recordset.Fields("SPALTE")
      	recordset.movenext
      	MyFile.Writeline output
      Loop
      MyFile.Close
      Gibt es da keine Möglichkeit das so ähnlich in VB.NET zu programmieren?

      Gruß

      Comment


      • #4
        Originally posted by sql_insider View Post
        Gibt es da keine Möglichkeit das so ähnlich in VB.NET zu programmieren?
        Natürlich gibt es das. Wie die "Hauptschleife" bis EOF auszusehen hat, habe ich doch schon geschrieben. Wie die einzelnen Zeilen aussehen sollen, hast Du bisher verschwiegen.

        In meinem Beispiel mit Console.WriteLine werden die Inhalte der ersten beiden Spalten mit Komma verbunden. Wenn Du nur eine Spalte übernehmen willst, dann schreib doch diesen Wert (wie Du es vorgemerkt hast). Wenn Du mehrere Spalten übernehmen willst, musst Du sie irgendwie kombinieren (dazu habe ich zwei Vorschläge gebracht).

        Oder liegt Dein Problem darin, dass Du "MyFile.Writeline" nicht übertragen kannst? Dann solltest Du das deutlicher sagen. Jürgen

        Comment


        • #5
          RE

          Hi Jürgen,
          danke für deine Antworten.

          Ich habe folgende Schleife geschrieben da ich nur einen Spalte auslesen muss:

          Code:
                 Dim reader As SqlDataReader = cmd.ExecuteReader()
          
                  While reader.Read
                      MyFile.WriteLine(reader("ruleid"))
                  End While
                  reader.Close()
                  MyFile.close()
          Jedoch bekomme ich einen Fehler beim ausführen....
          "Unhandeld exception has occurred in....
          Type mismathc. (Exception from HRESULT: 0x80020005 (DISP_E_TYPEMISMATCH))"

          D.h. die Übertragung in das Textfile funktioniert nicht

          Gruß

          Comment


          • #6
            Hallo,

            ich kann leider nicht erkennen, von welchem Typ MyFile ist; deswegen weiß ich auch nicht, welche Möglichkeiten es für MyFile.WriteLine() gibt. Vielleicht muss in diesem Fall der Wert dort genauer angegeben werden, d.h. typgerecht. Versuch es einmal mit:
            Code:
            MyFile.WriteLine(reader.GetInt32(0))
            Oder konvertiere das Ergebnis, das ja nur vom Typ object ist, in int.

            Jürgen

            Comment

            Working...
            X