[C#/SQL] Traitement Recordset de manière asynchrone Async/Await
Bonjour :),
J'ai dans une Form, une ComboBox qui, lors d'un clic sur celle ci, effectue une requête pouvant s'avérer longue. C'est pourquoi j'aimerais passer la main à l'UI le temps que cette requête s'effectue. J'ai essayé d'utilisé Async et Await mais impossible de trouver la bonne combinaison, sachant que j'ai comme erreur "Impossible d'attendre ADODB.Recordset" :(.
Voici mon code en synchrone :
-Code du trigger sur la CB :
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
|
private void CBBat_DropDown(object sender, EventArgs e)
{
String requete;
String connect;
ADODB.Recordset rs = new ADODB.Recordset();
if (this.CBBat.Items.Count == 0)
{
connect = "chaine de connexion";
requete = "Ma requete";
try
{
rs = ReqBDD(connect, requete, 15);
if (rs.EOF == false)
{
rs.MoveFirst();
while (rs.EOF == false)
{
if ((Convert.ToString(rs.Fields["Champ1"].Value)) != String.Empty) { this.CBBat.Items.Add(rs.Fields["Champ1"].Value); }
rs.MoveNext();
}
}
rs.Close();
}
catch
{
MessageBox.Show("erreur");
}
}
} |
Et voici le code de la fonction ReqBDD :
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
|
private ADODB.Recordset ReqBDD(String connect, String requete, int TimeOut)//Fonction ReqBDD
{
ADODB.Recordset rs = new ADODB.Recordset();
try
{
ADODB.Connection cn = new ADODB.Connection();
cn.ConnectionString = connect;
cn.ConnectionTimeout = TimeOut;
cn.CommandTimeout = TimeOut;
cn.Open(connect, "", "", -1);
rs.ActiveConnection = cn;
rs.Open(requete, cn, ADODB.CursorTypeEnum.adOpenStatic, ADODB.LockTypeEnum.adLockBatchOptimistic, 1);
}
catch (Exception ex)
{
MessageBox.Show("Erreur SQL avec l'exception : " + ex);
}
return rs;
} |
L'idée est d'exécuter la fonction ReqBDD de manière asynchrone, comment pourrais-je adapter ce code avec Async et Await ?
Merci d'avance et bonne journée.