1Danke
ERLEDIGT
JA
JA
ANTWORTEN
4
4
ZUGRIFFE
815
815
EMPFEHLEN
-
Hallo,
versuche DBNullValues aus meinen Tables zu entfernen und habe hierfür folgende Funktion geschrieben.
Ich weiss, dass meine Schleife über 1000 Änderungen an der Tabelle gemacht hat.
Beim DA.Update bekomme ich folgende Fehlermeldung:
"Für mindestens einen erforderlichen Parameter wurde kein Wert angegeben."
Ich bin, hoffentlich nicht fälschlicherweise, davon ausgegangen, dass mein Commandbuilder das sauber macht.
Kann die Commands nicht von Hand schreiben, da es für alle Tabellen möglich sein soll und die Spalten nie gleich sind.
Bin über jede Hilfe dankbar.
Gruß noFaiTh
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
Public Function CleanTable(ByVal sDB As String, ByVal sTable As String) As Boolean Dim myOleDbDataAdapter As OleDbDataAdapter Dim myDataSet As DataSet = New DataSet() Dim myDataTable As DataTable = New DataTable() Dim myDataCol As DataColumn Dim myDataRow As DataRow Dim myDataType As String Dim myOleDbConnection As OleDbConnection Dim myCommand As OleDbCommandBuilder Dim myCounter As Integer = 0 myOleDbConnection = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;" & "User ID=Admin;Data Source=" & sDB) Try myOleDbDataAdapter = New OleDbDataAdapter("select * from " & sTable, myOleDbConnection) myCommand = New OleDbCommandBuilder(myOleDbDataAdapter) myOleDbDataAdapter.Fill(myDataTable) For Each myDataCol In myDataTable.Columns myDataType = myDataCol.DataType.ToString For Each myDataRow In myDataTable.Rows If myDataRow(myDataCol) Is System.DBNull.Value Then Select Case myDataType Case "System.String" myDataRow(myDataCol) = "" myCounter += 1 Case "System.Int32" myDataRow(myDataCol) = 0 myCounter += 1 Case "System.Decimal" myDataRow(myDataCol) = 0 myCounter += 1 Case Else End Select End If Next Next If Not myDataTable.HasErrors Then myOleDbDataAdapter.Update(myDataTable) Else MessageBox.Show("Error in DataTable" & " myCounter: " & myCounter.ToString) End If Catch ex As OleDb.OleDbException MessageBox.Show(ex.Message & vbCrLf & ex.StackTrace) Return False Catch ex As Exception MessageBox.Show(ex.Message & vbCrLf & ex.StackTrace) Return False End Try Return True End Function
-
Möglicherweise hast du in deinem switch nur einen Datentyp vergessen zu behandeln. Schau mal nach in welcher Tabelle das geschieht und welche Werte der entsprechende Datensatz hat.
Vielen Dank für die Nutzung des Bewerten- und Danke-Buttons
Wenn man sieht, dass man einen anderen glücklich gemacht hat, ist die Welt um zwei glückliche Menschen reicher.
-
Hi Vereth,
danke für deine Antwort.
Kann mir überhaupt nicht vorstellen wie das ein Problem sein soll, da erstens Case Else alle restlichen Datentypen "behandelt", also nichts macht
und zweitens die Fehlermeldung mit dem Update-Command zu tun haben muss. Deshalb schließe ich auf den Commandbuilder.
Hab inzwischen auch schon die Statements im Adapter ersetzt via:
Code :1
oleDA.UpdateCommand = oleCB.GetUpdateCommand
Hat leider nichts am Fehler geändert.
Hoffe jemand weiss Rat.
Bis dahin
MfG noFaithGeändert von noFaiTh (15.04.10 um 08:00 Uhr)
-
Hallo
Habe jetzt auch noch die anderen Types behandelt, wie erwartet leider keine Änderung an der Fehlermeldung.
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73
Public Function CleanTable(ByVal sDB As String, ByVal sTable As String, Optional ByVal frmFLP As FlowLayoutPanel = Nothing) As Boolean Dim oleDA As OleDbDataAdapter Dim oleDT As DataTable = New DataTable() Dim oleDC As DataColumn Dim oleDR As DataRow Dim oleCN As OleDbConnection Dim oleCB As OleDbCommandBuilder Dim oleDType As String = "" Dim oleCount As Integer = 0 oleCN = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;Data Source=" & sDB) Try oleDA = New OleDbDataAdapter("select * from " & sTable, oleCN) oleCB = New OleDbCommandBuilder(oleDA) oleDA.Fill(oleDT) oleDA.UpdateCommand = oleCB.GetUpdateCommand oleDA.InsertCommand = oleCB.GetInsertCommand oleDA.DeleteCommand = oleCB.GetDeleteCommand For Each oleDC In oleDT.Columns oleDType = oleDC.DataType.ToString For Each oleDR In oleDT.Rows If oleDR(oleDC) Is System.DBNull.Value Then Select Case oleDType Case "System.String" oleDR(oleDC) = "" oleCount += 1 Case "System.Int32" oleDR(oleDC) = 0 oleCount += 1 Case "System.Decimal" oleDR(oleDC) = 0 oleCount += 1 Case "System.Double" oleDR(oleDC) = 0 oleCount += 1 Case "System.DateTime" oleDR(oleDC) = Convert.ToDateTime("01.01.1900") oleCount += 1 Case Else Debug.Print(oleDType.ToString) End Select End If Next Next If Not oleDT.HasErrors Then Debug.Print(oleDA.UpdateCommand.CommandText.ToString & Environment.NewLine & oleCount.ToString) oleDA.Update(oleDT) Else MessageBox.Show("Error in DataTable" & " myCounter: " & oleCount.ToString) End If Catch ex As OleDb.OleDbException MessageBox.Show(ex.Message & vbCrLf & ex.StackTrace) Return False Catch ex As Exception MessageBox.Show(ex.Message & vbCrLf & ex.StackTrace) Return False Finally If oleCN.State <> ConnectionState.Closed Then oleCN.Close() oleCN = Nothing End If End Try Return True End Function
-
Für alle die es interessiert:
In den Feldnamen waren "-", also z.B. "Kunden-Nr" und der Commandbuilder baut das Updatecommand zwar sauber auf,
aber leider kommt Access mit solchen Namen nicht klar. deshalb:
führt dazu, dass alle Feldnamen wie folgt aufgebaut werden [Kunden-Nr]. Und es ROCKTCode :1 2
oleCB.QuotePrefix = "[" oleCB.QuoteSuffic = "]"
Ähnliche Themen
-
DataAdapter, Dataset und Datagrid
Von Goldman im Forum .NET CaféAntworten: 2Letzter Beitrag: 25.05.09, 14:26 -
DataAdapter/-Update
Von Alfred_ im Forum .NET DatenverwaltungAntworten: 2Letzter Beitrag: 13.09.08, 17:11 -
mySQL Dataadapter - Problem mit negativen Zahlen
Von MasterDS im Forum .NET DatenverwaltungAntworten: 1Letzter Beitrag: 14.01.08, 08:25 -
C# SQLite DataAdapter Update Problem
Von Eichhoernchen09 im Forum Relationale DatenbanksystemeAntworten: 0Letzter Beitrag: 30.03.06, 09:22 -
problem mit DataAdapter
Von LordDeath im Forum .NET ArchivAntworten: 5Letzter Beitrag: 13.04.04, 11:20





Zitieren
Login





