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.Voici la String InsertCommand générée par le CommandBuilder:
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
J'ai volontairement tronqué cette ligne à 4 champs pour raison de confidentialité. En réalité, il y en a 27.
Code : Sélectionner tout - Visualiser dans une fenêtre à part INSERT INTO CounterParty (Name, NickName, AccountNumber, AccountCountry) VALUES (?, ?, ?, ?)
Merci à ceux qui se pencheront sur le problème.
Visual Studio 2010.
Partager