Bonjour,
Je dois copier des records d'une table à une autre et je m'emmêle les pinceaux entre les DataSet, DataAdapter, DataTable et autre DataRow...
Je me perds dans l'aide Microsoft qui est, soit incomplète (uniquement la syntaxe pour la copie), soit ne correspond pas à mon besoin.
Ma première table est une table construite. Elle ne vient pas d'une base de données.
La deuxième, par contre, est dans une DB (Access 2010).
Et le résultat de la copie doit se retrouver, in fine, dans cette DB.
Les champs sont identiques. Mêmes noms et mêmes types.
La copie des records d'une table à l'autre ne me pose pas problème.
C'est pour actualiser la DB que je rame.
La table destination est bien liée à la DB au travers d'un OleDbDataAdapter.
Après la copie, j'essaie un adapter.Update mais j'obtiens ce message d'erreur:
Erreur de syntaxe dans l'instruction INSERT INTO.
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
| Function CopyToDb(ByRef tblSource As DataTable, ByVal strDbFile As String) As Boolean
Dim adapter As OleDbDataAdapter
Dim connection As New OleDbConnection
Dim ds As New DataSet
Dim fi As New FileInfo(strDbFile)
Dim strConnect As String = ""
Dim strTable As String = ""
Dim tblDest As DataTable
If Not fi.Exists Then
MsgBox(String.Format("The file {0} doesn't exist", strDbFile))
Return False
Exit Function
End If
Select Case fi.Extension.ToUpper
Case ".ACCDB"
strConnect = String.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Jet OLEDB:Database Password={1};", strDbFile, "ThePassword")
strTable = "CounterParty"
connection.ConnectionString = strConnect
Try
connection.Open()
adapter = New OleDbDataAdapter("SELECT * FROM " & strTable & ";", connection)
Dim cmdBuilder As OleDbCommandBuilder = New OleDbCommandBuilder(adapter)
adapter.Fill(ds)
tblDest = ds.Tables(0)
For Each record As DataRow In tblSource.Rows
tblDest.ImportRow(record)
Next
adapter.InsertCommand = cmdBuilder.GetInsertCommand(True)
adapter.Update(tblDest) ' <=== Erreur ici: Erreur de syntaxe dans l'instruction INSERT INTO.
Catch ex As Exception
MsgBox(ex.Message)
Return False
End Try
Return True
Case Else
Return False
End Select
End Function |
Voici la String InsertCommand générée par le CommandBuilder:
INSERT INTO CounterParty (Name, NickName, AccountNumber, AccountCountry) VALUES (?, ?, ?, ?)
J'ai volontairement tronqué cette ligne à 4 champs pour raison de confidentialité. En réalité, il y en a 27.
Merci à ceux qui se pencheront sur le problème.
Visual Studio 2010.
Partager