【问题标题】:How to Insert more than 1000 record using SqlBulkCopy如何使用 SqlBulkCopy 插入超过 1000 条记录
【发布时间】:2016-06-06 06:47:14
【问题描述】:

我需要在 SQL Server 中插入超过 1000 条记录。但是使用我的代码,我只能插入 1000 条记录。请帮帮我。

using (SqlBulkCopy s = new SqlBulkCopy(dbConnection,SqlBulkCopyOptions.UseInternalTransaction, null))
{
     s.DestinationTableName = TableName;
     s.BatchSize = 10000;
     s.BulkCopyTimeout = 1800;
     foreach (var column in dt.Columns)
     {
         s.ColumnMappings.Add(column.ToString(), column.ToString());
     }
     s.WriteToServer(dt);
}

【问题讨论】:

  • 插入1001条记录会发生什么?
  • 只插入前 1000 条记录,丢弃 1000 条之后的所有记录。
  • 是超时还是抛出异常,一些错误信息?
  • 当然,您可以确保批量复制不会插入超过 1000 行。 IE。您没有在 Management Studio 中的表上使用右键单击选择,选择前 1000 个仅显示前 1000 行?
  • 我正在使用查询“select * from TableName”并且只返回 1000 行。

标签: c# .net sql-server sql-server-2008 sqlbulkcopy


【解决方案1】:

以下是我在项目中用于将批量数据从 excel 插入 SQL 服务器的实时工作代码

C#代码:

public static DataSet Bindgrid_StoreInSQL(string path)
    {


            string strFileType = Path.GetExtension(path).ToLower();
            string connString = "";
            if (strFileType.Trim() == ".xls")
            {
                connString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + path + ";Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=2\"";
            }
            else if (strFileType.Trim() == ".xlsx")
            {
                connString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + path + ";Extended Properties=\"Excel 12.0;HDR=Yes;IMEX=2\"";
            }
            string query = "SELECT * FROM [Sheet1$]";
            OleDbConnection conn = new OleDbConnection(connString);
            OleDbCommand cmd = new OleDbCommand(query, conn);
            OleDbDataAdapter da = new OleDbDataAdapter(cmd);
            DataSet ds = new DataSet();
            da.Fill(ds);
            DataTable Exceldt = ds.Tables[0];

            //creating object of SqlBulkCopy    
            SqlBulkCopy objbulk = new SqlBulkCopy(OneStopMethods_Common.constring_Property);
            //assigning Destination table name    
            objbulk.DestinationTableName = "Tern_boq";


            objbulk.ColumnMappings.Add("ID", "ID");
            objbulk.ColumnMappings.Add("Bill_No", "Bill_No");
            objbulk.ColumnMappings.Add("Page_No", "Page_No");
            objbulk.ColumnMappings.Add("ItemNo", "ItemNo");
            objbulk.ColumnMappings.Add("Description", "Description");
            objbulk.ColumnMappings.Add("BOQ_Qty", "BOQ_Qty");
            objbulk.ColumnMappings.Add("UNIT", "UNIT");
            objbulk.ColumnMappings.Add("Category1", "Category1");
            objbulk.ColumnMappings.Add("Category2", "Category2");
            objbulk.ColumnMappings.Add("Category3", "Category3");
            objbulk.ColumnMappings.Add("Estimated_UnitRate", "Estimated_UnitRate");
            objbulk.ColumnMappings.Add("Estimated_Amount", "Estimated_Amount");



            //inserting Datatable Records to DataBase    
            conn.Open();
            objbulk.WriteToServer(Exceldt);


            SqlDatabase obj = new SqlDatabase(OneStopMethods_Common.constring_Property);
            string selquery = " select * from Tern_boq";
            return obj.ExecuteDataSet(CommandType.Text, selquery);




    }

效果很好,希望能给你一些想法,请让我知道你的想法或建议

【讨论】:

  • 工作正常。我能够插入超过 1000 行。谢谢人:)
  • 这是我的荣幸,我真的很高兴我能帮助你..:)..如果需要其他任何内容,请告诉我..快乐分享..:)
  • oneStopMethods_Common.constring_Property 未被识别。我需要添加对某些内容的引用吗??
  • 您好,它只是一个连接字符串,您可以像这样简单地替换更改之前:SqlDatabase obj = new SqlDatabase(OneStopMethods_Common.constring_Property);更改后:SqlDatabase obj = new SqlDatabase("Data Source=ServerName;Initial Catalog=DatabaseName;User ID=UserName;Password=Password");注意:在上面的连接字符串中,适当地替换您的 servername 和 DatabaseName。这也可能对您有所帮助:connectionstrings.com/sql-server希望它会有所帮助,分享您的反馈谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-30
  • 1970-01-01
相关资源
最近更新 更多