Benutzer mit den meisten Antworten
SQL Befehl ausführen, danach Update mit Dataset klappt nicht

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
Antworten
-
Ich habe einfach den Teil mit der OleDbConnection vor den Teil mit der csv Datei gesetzt.
- Als Antwort markiert Robert BreitenhoferModerator Freitag, 15. Oktober 2010 08:36
Alle Antworten
-
Ich habe einfach den Teil mit der OleDbConnection vor den Teil mit der csv Datei gesetzt.
- Als Antwort markiert Robert BreitenhoferModerator Freitag, 15. Oktober 2010 08:36
-
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)