2010-08-11 2 views
0

J'ai DataTable avec la même structure dans SqlServer DB Table. Pour enregistrer les données dans un DataTable ce à DB Sql J'utilise le code ci-dessous:DataTable enregistrement optimal pour la base de données SQL

sqlCommand mcd; 

for(int i=0;i<dataTable.Rows.Count;i++) 
{ 
mcd=new SqlCommand(); 
cmd.CommandText="Insert into MSSQLtable values("+dataTable.Rows[i][0]+dataTable.Rows[i][1]+")"; 
cmd.ExecuteNonQuery(); 

} 

Comment insérer des données avec une autre façon?

Répondre

1

Il existe plusieurs autres moyens, consultez l'article de blog I wrote here sur le chargement en masse haute performance vers SQL Server à partir de .NET. Pour résumer, vous pouvez utiliser un SqlDataAdapter pour effectuer des insertions par lots (ou des mises à jour), ou pour améliorer les performances, vous pouvez utiliser SQLBulkCopy (insertions uniquement). L'approche SqlDataAdapter a démontré qu'il a fallu ~ 25s pour insérer 100 000 enregistrements dans la base de données, comparé à ~ 0,8s pour SqlBulkCopy.

Il existe des avantages/inconvénients pour chaque approche - par ex. SqlDataAdapter est pratique si vous voulez bien gérer les erreurs et continuer en cas d'erreur avec une ligne particulière.

+0

Est-il possible d'initialiser des données à partir de différents DB (par exemple, Oracle, VisualFoxPro), puis enregistrer dans Sql Server avec l'approche SqlBulkCopy? – loviji

+1

@loviji - Oui. Tout ce que vous devez faire est de charger les données de cette autre source dans quelque chose que vous pouvez ensuite passer à SqlBulkCopy (par exemple pourrait être un tableau ou DataRows, un DataTable, tout ce qui implémente IDataReader). – AdaTheDev

Questions connexes