6

リストをループして個々の項目を一度に 1 つずつ挿入するのではなく、C# のジェネリック リストを SQL Server に一括挿入するにはどうすればよいですか?

私は現在これを持っています。

private void AddSnapshotData()
{
  var password =       Cryptography.DecryptString("vhx7Hv7hYD2bF9N4XhN5pkQm8MRfxi+kogALYqwqSuo=");
  var figDb = "ZEUS";
  var connString =
    String.Format(
      "Data Source=1xx.x.xx.xxx;Initial Catalog={0};;User ID=appuser;Password={1};MultipleActiveResultSets=True",
      figDb, password);
  var myConnection = new SqlConnection(connString);
  myConnection.Open();

  foreach (var holding in _dHoldList)
  {
    lbStatus.Text = "Adding information to SQL for client: " + holding.ClientNo;
    _reports.AddZeusData("tblAllBrooksHoldingsSnapshot", "CliNo, SEDOL, ISIN, QtyHeld, DateOfSnapshot",
                         "'" + holding.ClientNo + "','" + holding.Sedol + "','" + holding.ISIN + "','" +
                         holding.QuantityHeld + "','" + DateTime.Today.ToString("yyyyMMdd") + "'", false, myConnection);
  }
  myConnection.Close();
  lbStatus.Visible = false;
}

dHoldListのリストはどこにありますかDHOLDS;

public class DHOLDS : ExcelReport
 {
public String ClientNo { get; set; }
public String Sedol { get; set; }
public Double QuantityHeld { get; set; }
public Double ValueOfStock { get; set; }
public String Depot { get; set; }
public String ValC4 { get; set; }
public String StockR1 { get; set; }
public String StockR2 { get; set; }
public Double BookCost { get; set; }
public String ISIN { get; set; }
}
4

3 に答える 3

9

リストをデータテーブルにマップしてから、SqlBulkCopy を使用てすべての行を一度に挿入できます。

于 2012-12-13T11:28:11.383 に答える
0

別の方法として、次のブログ投稿で説明されているように、リストを XML に変換することもできます 。http://charleskong.com/blog/2009/09/insert-aspnet-objects-to-sql-server/

別の注意: コード内の要素を繰り返し処理することで解決したい場合は、1 つのトランザクションですべての挿入を行うと、パフォーマンスが向上する可能性があります。

于 2012-12-13T11:47:07.390 に答える