データベースに書き込まれたDataTableバッチデータは、3つのメソッドを比較します

 

 

データテーブルの3つの方法のデータベースの比較に書き込まれたバッチデータ 

挿入サイクルインサート1);
2)sqldataadapter.update(データセット、テーブル名);
3)sqlbulkcopy.WriteToServer(データテーブル)。

1、テストデータテーブル表を生成する次のように、テーブル構造である:
一意ID(主キー、自動成長)|仕入| CompanyCode |住所|所有者|メモ
6つのフィールドの合計。
SqlConnectionオブジェクトのSQLConnection =新しい新しいSqlConnectionオブジェクト(れたconnectionString);
SqlDataAdapterオブジェクトのSqlDataAdapter =新しい新しいSqlDataAdapterオブジェクト( "1 = 2のtable_1 SELECT * FROM"、のSQLConnection);
データセットのデータセット=新しい新しいデータセット();
。SqlDataAdapterオブジェクト塗りつぶし(データセット"のtable_1")、
データテーブルデータテーブルdataset.Tables = [0];
生成// 20000のレコード
のために(INT I = 0; I <20000; I ++)
{
      DataRowのDataRow = datatable.NewRow()。
      DataRow [ "得意先" = "得意先" + String.Formatの( "{0:0000}"、I)。
      DataRow [ "CompanyCode"] = "companycode" + String.Formatの( "{0:0000}"、I)。
      DataRow [ "住所"] = "アドレス" + String.Formatの( "{0:0000}"、I)。
      DataRow [ "所有者"] = "所有者" + String.Formatの( "{0:0000}"、I)。
      DataRow [ "メモ" = "メモ" + String.Formatの( "{0:0000}"、I)。
      datatable.Rows.Add(のDataRow)。
}


図2に示すように、使用sqlcommand.executenonquery()方法插入
foreachの(のDataRowのDataRow datatable.Rowsで)
{
文字列のSQL = "INSERT INTO [のtable_1]([得意先名]、[CompanyCode]、[アドレス]、[オーナー]、
)" +
" VALUES( '」+のDataRow [ "得意先名"]。ToStringメソッド()+ "'" +
」、」 '+のDataRow [ "CompanyCode"]。ToStringメソッド()+ "'" +
」、」 '+のDataRow [ "住所" ] .ToString()+ "'" +
」、」' +のDataRow [ "所有者"]。ToStringメソッド()+ "'" +
」、」' +のDataRow [ "メモ"]。ToStringメソッド()+ "')" ;
   使用(SqlConnectionのsqlconn =新しいSqlConnectionオブジェクト(れたconnectionString))
   {
   sqlconn.Open()。   

   SqlCommandオブジェクトSqlCommandオブジェクト=新しいSqlCommandオブジェクト(SQL、sqlconn)。
   sqlcommand.ExecuteNonQuery();
   sqlconn.Close();
   }
}


插入20000条记录时间:00:00:29.7336000

3、使用sqldataadapter.update(dataset,tablename);
SqlCommand insertcommand = new SqlCommand("INSERT INTO [Table_1]([CompanyName],[CompanyCode],[Address],[Owner],
)" +
"VALUES(@CompanyName, @CompanyCode,@Address,@Owner,@Memo)",new SqlConnection(connectionString));
insertcommand.Parameters.Add("@CompanyName", SqlDbType.NChar, 50, "CompanyName");
insertcommand.Parameters.Add("@CompanyCode", SqlDbType.NChar, 25, "CompanyCode");
insertcommand.Parameters.Add("@Address", SqlDbType.NChar, 255, "Address");
insertcommand.Parameters.Add("@Owner", SqlDbType.NChar, 25, "Owner");
insertcommand.Parameters.Add("@Memo", SqlDbType.NChar, 255, "Memo");
sqldataadapter.InsertCommand = insertcommand;
sqldataadapter.Update(dataset, "Table_1");


插入20000条记录时间:00:00:22.8938000

4、使用sqlbulkcopy.writetoserver(datatable)
SqlBulkCopy sqlbulkcopy = new SqlBulkCopy(connectionString, SqlBulkCopyOptions.UseInternalTransaction);
sqlbulkcopy.DestinationTableName = "Table_1";//数据库中的表名
sqlbulkcopy.WriteToServer(dataset.Tables[0]);


插入20000条记录时间:00:00:00.3276000

所以说速度是sqlbulkcopy最快,sqldataadapter.update()次之,sqlcommand.ExecuteNonQuery()最慢。

 

おすすめ

転載: www.cnblogs.com/wfy680/p/12004526.html