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.Citation:
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:
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:
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:
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(); } }
Citation:
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 :)