Bonjour à tous !
Je m'adresse à vous parce que j'ai un problème (vous vous en doutiez hein ?!). Je tente d'envoyer une requête de type SQL à une base de données Access qui est créée plus haut.
Je reçois un message d'erreur indiquant queAprès avoir recherché un peu sur votre forum j'ai trouvé une solution qui demandait d'utiliser les chaines pramétrées, mais le mienne est bien trop longue pour que ce soit rentable. Je ne le ferais qu'en cas d'obligation.Aucun texte de commande n'a été défini pour l'objet de commande.
Voilà le code :
- Création de la DB :
- Création de toutes les tables (cette fonction ne soulève pas d'exception !) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 private void CreateNewMDB(string path) { ADOX.Catalog cat = new ADOX.Catalog(); at.Create("Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + path + "; Jet OLEDB:Engine Type=5"); cat = null; }
- Remplissage de toutes les tables :
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 private void CreateMDBTable(FieldList P_TableDesc) { String temp; //Construction de la ConnectionString. temp = ""; temp += "CREATE TABLE " + P_TableDesc[0].SQLName + " ("; for (int i = 1; i < P_TableDesc.Count; ++i) { temp += "[" + P_TableDesc[i].SQLName + "] " + P_TableDesc[i].SQLType; if (i != P_TableDesc.Count - 1) temp += ", "; } temp += ")"; //Création de la commande OleDbCommand MyMDBCmd = new OleDbCommand(temp, MyMDBDataConnection); //Envoi de la requête. if (MyMDBDataConnection.State != System.Data.ConnectionState.Open) { MyMDBDataConnection.Open(); MyMDBCmd.ExecuteNonQuery(); MyMDBDataConnection.Close(); } else { MyMDBDataCmd.ExecuteNonQuery(); MyMDBDataConnection.Close(); } }
Voilà la commande en sortie de la partie //Construction de la ConnectionString :
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 public void CreateMDBRecord(List<Field> P_Fields) { int i; String temp; //Construction de la connectionString. temp = ""; temp += "INSERT INTO [" + P_Fields[0].SQLName + "] ("; for (i = 1; i < P_Fields.Count; ++i) { temp += "[" + P_Fields[i].SQLName + "]"; if (i != P_Fields.Count - 1) temp += ", "; } temp += ") VALUES ("; for(i = 1; i < P_Fields.Count;++i) { //temp += "'" + P_Fields[i].Value + "'"; //Vérification de la syntaxe des chaines de caractères. if (String.IsNullOrEmpty(P_Fields[i].Value)) { temp += "' '"; } else { temp += "'" + P_Fields[i].Value + "'"; } if (i != P_Fields.Count - 1) temp += ", "; } temp += ")"; //Création de la commande OleDbCommand MyMDBCmd = new OleDbCommand(); MyMDBCmd.CommandText = temp; MyMDBCmd.Connection = MyMDBDataConnection; //Envoi de la requête. if (MyMDBDataConnection.State != System.Data.ConnectionState.Open) { MyMDBDataConnection.Open(); MyMDBDataCmd.ExecuteNonQuery(); MyMDBDataConnection.Close(); } else { MyMDBDataCmd.ExecuteNonQuery(); MyMDBDataConnection.Close(); } }
INSERT INTO [Users] ([Id], [Civilite], [Name], [Prenom], [Type], [ActivationMode], [State], [AccountName], [AccountPwd], [RightsBeginDate], [RightsEndDate], [RightsIsPermanent], [Company], [AddressStreetNb], [AddressStreetName1], [AddressStreetName2], [AddressZipCode], [AddressCity], [AddressCountry], [TelOffice], [TelPortable], [TelHome], [PictureFile], [Language], [AdministrateurLocal], [DelegueLocal], [FreeText01], [FreeText02], [FreeText03], [FreeText04], [FreeText05], [FreeText06], [FreeText07], [FreeText08], [FreeText09], [BadgeId], [CodeClavier]) VALUES ('1', 'Monsieur', 'Badge Orange', ' ', 'Administrateur', 'Badge', 'Active', 'badge orange', 'badge orange', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '\Photos\Photo_Unknown.jpg', 'FR', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'FFFF35BF3E48', '123456FF')
Bon, désolé pour la longueur du post et du code
Si vous voyez quoi que ce soit, toute suggestion me ferait avancer puisque je bute sur ce problème depuis ce matin. Merci d'avance à tous ceux qui répondront.
Bonne journée
Partager