Bonjour,
Je débute en SQL, et j'ai déjà réussi à ajouté rapidement des lignes (4096) en un clin d'œil avec BeginTransaction:
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 public int ExecuteWriteAllDictionary(string CommandLine, Dictionary<int, Dictionary<string, object>> Dic = null, string BaseSqlite = "base.db") { try { int numberOfRowsAffected = 0; Dtbase = "Data Source=" + BaseSqlite; // Creates new sqlite database if it is not found using (var con = new SQLiteConnection(Dtbase)) { con.Open(); using (var cmd = new SQLiteCommand(con)) { using (var transaction = con.BeginTransaction()) { // 100,000 inserts for (int h = 0; h <= Dic.Count - 1; h++) { cmd.CommandText = CommandLine; if (Dic != null) { if (Dic.ContainsKey(h)) { Dictionary<string, object> args = Dic[h]; foreach (KeyValuePair<string, object> entry in args) { cmd.Parameters.AddWithValue(entry.Key, entry.Value); } } } numberOfRowsAffected += cmd.ExecuteNonQuery(); } transaction.Commit(); } } } return numberOfRowsAffected; } catch (Exception ex) { return -1; } }
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 Dictionary<int, Dictionary<string, object>> dic = new Dictionary<int, Dictionary<string, object>>(); query = "INSERT INTO Table(Var1, Var2, Var3, Var4, Var5, Var6, Var7, var8) " + "VALUES (@Var1, @Var2, @Var3, @Var4, @Var5, @Var6, @Var7, @Var8 )"; for (int h = 0; h < DicoBase.Length; h++) { var args = new Dictionary<string, object> { {"@Var1", mVar1}, {"@Var2", mVar2}, {"@Var3", mVar3}, {"@Var4", mVar4}, {"@Var5", mVar5}, {"@Var6", mVar6}, {"@Var7", mVar7}, {"@Var8", mVar8} }; dic.Add(h, args); } ExecuteWriteAllDictionary(query, dic)
Voila, cela fonctionne très bien, mais est-ce que l'on peut l'adapter pour un Update avec des closes WHERE, pour le moment j'ai bien-sûr essayé:
Mais cela ne fonctionne pas, il m'indique une erreur de syntaxe. J'ai essayé avec et sans les cotes ' .
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 Dictionary<int, Dictionary<string, object>> dic = new Dictionary<int, Dictionary<string, object>>(); query = "UPDATE MaTable SET Var1 = '@Var1' WHERE Var2 = '@Var2'"; foreach (string var in myTable.Keys) { string mVar1= myTable[var].Var1; string mVar2 = myTable[plageE].Var2; var args = new Dictionary<string, object> { {"@Var1", mVar1}, {"@Var2", mVar2} }; dic.Add(y, args); y++; } ExecuteWriteAllDictionary(query, dic)
Y a t'il un moyen que cela fonctionne dans le même principe, car envoyer la mise à jour ligne par ligne prend un temps fou.
Merci de votre aide.
Partager