Bonjour,
Je débute dans les bases de données avec déjà avec 3 bases, SQlite en local, et MySql ou Oracle en Distant, avec des synchronisation à faire.
Je développe en C# et using Oracle.ManagedDataAccess.Client.
Pour Sqlite et MySql les requêtes paramétrées fonctionnent très bien. bon je n'ai pas essayé encore avec autant de ligne donc à tester sur des si grosse data (330 000 lignes).
Par contre pour Oracle cela compile en C# mais plante lorsque je fait mon 2eme ExecuteNonQuery();
-->C'est pour du test pour le moment, normalement les synchronisations sont régulière et l'on devrait pas à avoir à faire passer autant de data, mais en cas de plantage du serveur Oracle, les systèmes continue de tourner en chargeant la base local SQLite donc potentiellement la base local pourrait grossir, donc il faut que cela fonctionne.
Voila comment je fais avec SQLite: (J'ai épuré le code)
J'ai trouvé une idée ICI l
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
50
51
52
53
54
55
56
57
58 using Oracle.ManagedDataAccess.Client; /*L'appel de la fonction:*/ public void TestOracle (MES_DATAS mes_Dm) { int idx = 0; Dictionary<int, Dictionary<string, object>> DicArgs = new Dictionary<int, Dictionary<string, object>>(); string query = "INSERT INTO DOS(UPT_TIME, NUMERO, DATE, EP) VALUES(@UPT_TIME, @NUMERO, @DATE, @EP)"; foreach (DOS_ME dm in mes_Dm) { Dictionary<string, object> args = new Dictionary<string, object> { { "@UPT_TIME", dm.Upd }, { "@NUMERO", dm.ID }, { "@DATE", dm.tmStamp}, { "@EP", dm.Ep }, }; DicArgs.Add(idx, args); idx++; } ExecuteWriteAllParamDictionary(query, DicArgs); } /*La fonction Oracle*/ public int ExecuteWriteAllParamDictionary(string CommandLine, Dictionary<int, Dictionary<string, object>> Dic ) { using (var con = new SQLiteConnection(Dtbase)) { con.Open(); using (var cmd = new SQLiteCommand(con)) { using (var transaction = con.BeginTransaction()) { for (int h = 0; h <= Dic.Count - 1; h++) { cmd.CommandText = CommandLine; args = Dic[h]; foreach (KeyValuePair<string, object> entry in args) { cmd.Parameters.AddWithValue(entry.Key, entry.Value); } cmd.Prepare(); numberOfRowsAffected += cmd.ExecuteNonQuery(); } transaction.Commit(); } } } }
Mais cela utilise leur fonctionnalités, pas ceux native de Oracle.ManagedDataAccess.
Mon collège m'a fait un fichier a insérer manuellement dans Oracle (pour les test) mais je trouve cela bien long malgré tout.
Mais il y en a pour environs 10 minutes a envoyer toutes les tables dont la plus grosse de plus de 330 000 lignes.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 REM INSERTING into ALARME_mp SET DEFINE OFF; INSERT ALL INTO ALARME_mp (ID,LIB,DO,UPT_TIME) VALUES ('1','Alarme par défaut','6400',to_date('11/04/22','DD/MM/RR')) INTO ALARME_mp (ID,LIB,DO,UPT_TIME) VALUES ('2','Installations C','500',to_date('16/08/22','DD/MM/RR')) etc. SELECT * FROM DUAL; etc.
Il est possible de faire du paramétré avec Oracle.ManagedDataAccess.Client ?
Merci
Partager