none
SQL Befehl ausführen, danach Update mit Dataset klappt nicht RRS feed

  • Frage

  • Ich möchte mit einem SQL Befehl eine Spalte einer Tabelle leeren - das klappt auch soweit ganz gut. Danach soll in diese Spalten was eingefügt werden (läuft hier mit Datasets ab). Allerdings scheint es mir so, dass der SQL alles überschreibt. Die Zeilen sind alle leer nach dem Debuggen. Wenn ich den SQL Befehl rausnehme, dann werden die Zeilen danach gefüllt. Hier mal mein gesamter Code (das ganze ist noch mit einer csv Datei verknüpft, etc.) Die Connectionstringwerte sind natürlich jetzt einfach zensiert indem ich irgendwas reingetippt habe. Aber die Datenbankverbindung besteht bei mir. Ich weiß nur nicht, wieso das mit dem SQL Befehl und danach dem Update via Dataset nicht funktioniert. Weiß jemand Rat?

     

     

    Imports System.IO
    Imports System.Data.OleDb
    Imports System
    Imports System.Data.SqlClient
    
    
    Public Class Form1
    
      Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
     
    
        Dim strConnection As String = "Password=test;Persist Security Info=True;" & _
     "User ID=user3;Initial Catalog=kdakad;" & _
     "Data Source=199.999.999;"
       
    
        Dim conn As SqlConnection = New SqlConnection(strConnection)
    
    
        'csv
    
    
        Dim Dateiname As String = "C:\Dokumente und Einstellungen\Hanswurst\Desktop\testordner\test.csv"
        Dim fs As FileStream
        Dim sr As StreamReader
        Dim zeile As String
        Dim ergebnis() As String
        Dim cmd As New OleDbCommand
    
    
    
        fs = New FileStream(Dateiname, FileMode.Open)
        sr = New StreamReader(fs)
    
        Do Until sr.Peek() = -1
          zeile = sr.ReadLine()
          ergebnis = zeile.Split(";")
    
          If UBound(ergebnis) > 0 Then
            If IsNumeric(ergebnis(1)) Then
    
    
              ListBox1.Items.Add(ergebnis(0) & " " & ergebnis(1))
    
              Dim SQL As String = "Select * from Artikel where artid = " & ergebnis(1)
    
    
              Dim da As New SqlDataAdapter(SQL, conn)
    
              Dim cmdb As New SqlCommandBuilder(da)
              Dim ds As New DataSet()
    
    
    
    
              Dim con As New OleDbConnection
            
    
    
              'Baut die Verbindung auf
              con.ConnectionString =
                "Provider=test;Server=199.999.999;uid=uiasf;pwd=test;database=sffasf;"
    
              cmd.Connection = con
    
    
    
              conn.Open()
              
              con.Open()
    
    
    
              cmd.CommandText = "update artikel set altean = ' '"
              cmd.ExecuteNonQuery()
    
              con.Close()
    
    
    
              da.Fill(ds, "artikel")
    
              If (ds.Tables("artikel").Rows.Count) < 1 Then
                ListBox1.Items.Add("nicht gefunden: " & ergebnis(1))
              Else
    
                Dim dt As DataTable = ds.Tables("Artikel")
    
                For Each row As DataRow In dt.Rows
                  ds.Tables("Artikel").Rows(0).BeginEdit()
                  row("altean") = ergebnis(0)
                  ds.Tables("Artikel").Rows(0).EndEdit()
                Next
    
              End If
    
    
    
              da.Update(ds, "artikel")
              conn.Close()
    
    
    
    
            End If
    
          End If
    
        Loop
        sr.Close()
      End Sub
    End Class
     
    

     

    Donnerstag, 14. Oktober 2010 12:11

Antworten

Alle Antworten

  • Danke erstmal, aber ich brauche leider eine Lösung für meine Variante mit Datasets..
    Freitag, 15. Oktober 2010 06:01
  • Warum?
    Freitag, 15. Oktober 2010 06:52
    Beantworter
  • Das ist halt so ;D

     

    Habe die Lösung aber selber gefunden.

    Freitag, 15. Oktober 2010 07:17
  • Hallo dejam27,

    Es freut uns dass Du Dein Problem lösen könntest.

    Es wäre schön, wenn Du posten würdest wie es funktioniert hat, denn dann profitieren unter Umständen andere mit dem gleichen Problem davon.

    Grüße,

    Robert

    Freitag, 15. Oktober 2010 07:52
    Moderator
  • Ich habe einfach den Teil mit der OleDbConnection vor den Teil mit der csv Datei gesetzt.

     

     

    Freitag, 15. Oktober 2010 08:01
  • Hallo,

    Das ist halt so ;D

    Eine nachvollziehbare Begründung hierfür wäre für alle Beteiligten
    von Vorteil, da man nur so feststellen kann, ob Du wirklich ein oder
    sogar mehrere DataSets benötigst.

    Ein DataSet ist erst mal nichts weiter als ein Container für eine
    oder mehrere DataTables, die solange sie nicht in log. Beziehung
    zueinander gesetzt werden sollen auch ebensogut ganz ohne
    DataSet existieren können. In diesem Fall wäre ein DataSet
    einfach völlig unnötiger Ballast.

    Sollen zwei oder mehrere DataTable in Beziehung zueinander
    gesetzt werden (Relation) dann müssen diese DataTables und
    das/die zugehörigen Relationobjekte in einem gemeinsamen
    DataSet liegen.

    Ich bin fast sicher, dass Du keine Relationobjekte nutzt und
    deshalb gibt es mit hoher Wahrscheinlich auch keinen
    Grund, Deine DataTables in ein Dataset zu packen.

    Habe die Lösung aber selber gefunden.

    Nähere Informationen hierzu wären für andere, die hier auch
    mitlesen und auch für jene, die sich die Mühe machen, Dir
    zu helfen, sehr nützlich.

    Gruß aus St.Georgen
    Peter Götz
    www.gssg.de (mit VB-Tipps u. Beispielprogrammen)

    Freitag, 15. Oktober 2010 11:25