dans mon code, l'utilisateur peut télécharger un document excel souhait contient sa liste de contacts téléphoniques.Me en tant que développeur devrait lire ce fichier excel le transformer en un dataTable et l'insérer dans le base de données . Le problème est que certains clients ont une quantité énorme de contacts comme dire 5000 contacts et plus et quand j'essaye d'insérer cette quantité de données dans la base de données il s'écrase et me donne une exception de délai d'attente. Quel serait le meilleur moyen d'éviter ce genre d'exception et est-ce que leur code peut réduire le temps de l'instruction d'insertion afin que l'utilisateur n'attende pas trop longtemps?Traiter une énorme quantité de données lors de l'insertion dans la base de données SQL
le code
public SqlConnection connection = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString);
public void Insert(string InsertQuery)
{
SqlDataAdapter adp = new SqlDataAdapter();
adp.InsertCommand = new SqlCommand(InsertQuery, connection);
if (connection.State == System.Data.ConnectionState.Closed)
{
connection.Open();
}
adp.InsertCommand.ExecuteNonQuery();
connection.Close();
}
protected void submit_Click(object sender, EventArgs e)
{
string UploadFolder = "Savedfiles/";
if (Upload.HasFile) {
string fileName = Upload.PostedFile.FileName;
string path=Server.MapPath(UploadFolder+fileName);
Upload.SaveAs(path);
Msg.Text = "successfully uploaded";
DataTable ValuesDt = new DataTable();
ValuesDt = ConvertExcelFileToDataTable(path);
Session["valuesdt"] = ValuesDt;
Excel_grd.DataSource = ValuesDt;
Excel_grd.DataBind();
}
}
protected void SendToServer_Click(object sender, EventArgs e)
{
DataTable Values = Session["valuesdt"] as DataTable ;
if(Values.Rows.Count>0)
{
DataTable dv = Values.DefaultView.ToTable(true, "Mobile1", "Mobile2", "Tel", "Category");
double Mobile1,Mobile2,Tel;string Category="";
for (int i = 0; i < Values.Rows.Count; i++)
{
Mobile1 =Values.Rows[i]["Mobile1"].ToString()==""?0: double.Parse(Values.Rows[i]["Mobile1"].ToString());
Mobile2 = Values.Rows[i]["Mobile2"].ToString() == "" ? 0 : double.Parse(Values.Rows[i]["Mobile2"].ToString());
Tel = Values.Rows[i]["Tel"].ToString() == "" ? 0 : double.Parse(Values.Rows[i]["Tel"].ToString());
Category = Values.Rows[i]["Category"].ToString();
Insert("INSERT INTO client(Mobile1,Mobile2,Tel,Category) VALUES(" + Mobile1 + "," + Mobile2 + "," + Tel + ",'" + Category + "')");
Msg.Text = "Submitied successfully to the server ";
}
}
}
Vous pourriez faire quelques tests avec insert en vrac ou de la table des paramètres évalués. Sachez également que votre code est actuellement sujet à l'injection SQL et que sa gestion des exceptions est médiocre. –
c'est juste un projet de test et ce n'est pas le projet de production – Sora
Vous savez que 'SqlDataAdapter' dans votre méthode' Insert' ne fait * rien du tout *, non? Mais en effet: paramètres ... dans le code réel: certainement besoin de –