J'utilise Webservice qui va retourner les données de la base de données via datatable et je vais convertir la datatable en tableau d'octets. En frontal, je vais reconvertir le bytearray en datatable et utilisé ajaxloader pour l'afficher dans le formulaire. C'est un chargement dynamique. Donc, pour chaque clic, il faut 10 secondes pour récupérer les données indépendamment de la taille des données. Donc, j'ai utilisé la datatable statique et j'ai chargé toutes les données dans cette datatable dans l'événement de chargement de la page. Mais, pas de réaction. Cela prend seulement la même heure. Même, il n'y a pas de données à récupérer, le chargeur ajax est en cours de chargement pendant 10 secondes. Le problème est avec Ajax ou mon webservice ?? Plz, dites-moi une autre idée ?? !!Comment accélérer le chargement des données de la base de données
Mon code pour l'événement listboxclick
protected void listboxcity_SelectedIndexChanged(object sender, EventArgs e)
{
string sqlvalue = string.Empty;
//Thread.Sleep(200);
for (int i = 0; i < listboxcity.Items.Count; i++)
{
if (listboxcity.Items[i].Selected == true)
sqlvalue += listboxcity.Items[i].ToString() + ",";
}
if (sqlvalue.EndsWith(","))
{
sqlvalue = sqlvalue.Remove(sqlvalue.Length - 1);
}
txtprefcity.Text = sqlvalue;
if (txtprefcity.Text != string.Empty)
{
listboxarea.Items.Clear();
txtprefarea.Text = "";
try{
string[] strarea = txtprefcity.Text.ToString().Split(',');
foreach (String s in strarea)
{
DataTable dtarea = new DataTable();
DataTable dt = bc.ConvertByteToDataTable(objservice.GetData("getdistrictbyname", new object[] { s }));
foreach (DataRow r in dt.Rows)
dtarea = bc.ConvertByteToDataTable(objservice.GetData("getarea", new object[] { int.Parse(r["countryid"].ToString()), int.Parse(r["stateid"].ToString()), int.Parse(r["districtid"].ToString()) }));
foreach (DataRow rw in dtarea.Rows)
{
listboxarea.Items.Add(rw["areaname"].ToString());
}
}
}
catch (Exception ex)
{
ObjLog.Write(ex.Message);
}
}
}
Méthode Web est la suivante:
public byte[] GetData(string StoredProcedureName, params object[] ParameterValues)
{
GC.Collect();
using (SqlConnection MyConnection = new SqlConnection(connectionstring))
{
using (SqlCommand MyCommand = new SqlCommand(StoredProcedureName, MyConnection))
{
using (SqlDataAdapter MyAdapter = new SqlDataAdapter())
{
MyConnection.Open();
MyCommand.CommandType = CommandType.StoredProcedure;
MyAdapter.SelectCommand = MyCommand;
SqlCommandBuilder.DeriveParameters(MyCommand);
int Index = 0;
foreach (SqlParameter Parameter in MyCommand.Parameters)
{
if (Parameter.Direction == ParameterDirection.Input || Parameter.Direction == ParameterDirection.InputOutput)
{
if (ParameterValues[Index] != null)
{
if (ParameterValues[Index].ToString() != string.Empty)
{
Parameter.Value = ParameterValues[Index];
}
else
{
Parameter.Value = DBNull.Value;
}
}
else
{
Parameter.Value = DBNull.Value;
}
Index++;
}
}
using (DataTable ds = new DataTable())
{
MyAdapter.Fill(ds);
MyConnection.Close();
return convertdatatabletobytearray(ds);
}
}
}
}
}
Posté mon code .. C'est si simple requête seulement .. Et les données sont également moins .. J'ai essayé d'enlever la conversion .. Mais, même effet que je reçois .. Je suppose que le problème avec ajaxloader ?? mais, je ne peux pas utiliser sans ajax – Nila