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.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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.