自学.net(5)SqlBulkCopy批量数据插入

插个1万条的数据用了40多秒,我感觉我这个代码还是有问题

using Microsoft.Win32;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;

namespace 导入数据优化
{
    /// <summary>
    /// MainWindow.xaml 的交互逻辑
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }

        private void btnImport_Click(object sender, RoutedEventArgs e)
        {
            string connStr = ConfigurationManager.ConnectionStrings["dbConnStr"].ConnectionString;

            OpenFileDialog ofg = new OpenFileDialog();
            ofg.Filter = "文本|*.txt";
            if (ofg.ShowDialog() == false)
            {
                return;
            }
            IEnumerable<string> lines = File.ReadLines(ofg.FileName, Encoding.Default);
            DateTime startTime=DateTime.Now;

            DataTable table = new DataTable();
            table.Columns.Add("haoduan");
            table.Columns.Add("diqu");
            table.Columns.Add("leixing");
            table.Columns.Add("quhao");
            for (int i = 1; i < lines.Count(); i++)
            {
                 string line = lines.ElementAt(i);
                 string[] str = line.Split(‘\t‘);
                 string haoduan = str[0];
                 string diqu = str[1];
                 diqu.Trim(‘"‘);
                 string leixing = str[2];
                 leixing.Trim(‘"‘);
                 string quhao = str[3];
                 quhao.Trim(‘"‘);

                  DataRow row=table.NewRow();
                  row["Haoduan"] = haoduan;
                  row["Diqu"] = diqu;
                  row["Leixing"] = leixing;
                  row["Quhao"] = quhao;
                  table.Rows.Add(row);

            }

            using (SqlBulkCopy bulkCopy = new SqlBulkCopy(connStr))
            {
                bulkCopy.DestinationTableName = "T_Tel";
                bulkCopy.ColumnMappings.Add("haoduan", "haoduan");
                bulkCopy.ColumnMappings.Add("diqu", "diqu");
                bulkCopy.ColumnMappings.Add("leixing", "leixing");
                bulkCopy.ColumnMappings.Add("quhao", "quhao");
                bulkCopy.WriteToServer(table);
            }
            TimeSpan ts = DateTime.Now - startTime;
            MessageBox.Show(ts.ToString());

//            using (SqlConnection conn = new SqlConnection(connStr))
//           {
//                conn.Open();

//                for (int i = 1; i < lines.Count(); i++)
//                {
//                    string line = lines.ElementAt(i);
//                    string[] str = line.Split(‘\t‘);
//                    string haoduan = str[0];
//                    string diqu = str[1];
//                    diqu.Trim(‘"‘);
//                    string leixing = str[2];
//                    leixing.Trim(‘"‘);
//                    string quhao = str[3];
//                    quhao.Trim(‘"‘);
//                    using (SqlCommand cmd = conn.CreateCommand())
//                    {
//                        cmd.CommandText = @"insert into T_Tel(haoduan,diqu,leixing,quhao)
//                        values (@Haoduan,@Diqu,@Leixing,@Quhao)";
//                        cmd.Parameters.Add(new SqlParameter("@Haoduan", haoduan));
//                        cmd.Parameters.Add(new SqlParameter("@Diqu", diqu));
//                        cmd.Parameters.Add(new SqlParameter("@Leixing", leixing));
//                        cmd.Parameters.Add(new SqlParameter("@Quhao", quhao));
//                        cmd.ExecuteNonQuery();
//                    }
//                }
//            }

        }
    }
}
时间: 2024-10-10 04:48:45

自学.net(5)SqlBulkCopy批量数据插入的相关文章

数据库批量数据插入问题分析

在数据库的相关开发中,经常会遇到数据的批量插入问题.本文主要是通过实验的方式探讨批量数据插入的瓶颈,以及优化建议. 以10w条记录的插入作为实验对象,采用下面的几种方法插入: 1.       普通插入:普通的一条条插入 2.       普通插入+手动提交:setAutoCommit(false).commit() 3.       普通插入+手动提交+ prepareStatement方式 4.       批量插入:addBatch.executeBatch 5.       批量插入:i

使用SqlBulkCopy进行批量数据插入

1 Dim dt As DataTable = New DataTable() 2 dt.Columns.Add("DtCostProductRuleGUID", GetType(Guid)) 3 dt.Columns.Add("RecollectGUID", GetType(Guid)) 4 dt.Columns.Add("ProjCode", GetType(String)) 5 dt.Columns.Add("ProductGUI

SqlBulkCopy大批量数据插入到sql表中

alter TYPE TableType AS TABLE ( Name VARCHAR(50) , code VARCHAR(50) ) GO alter PROCEDURE usp_InsertProductionLocation @TVP TableType READONLY AS SET NOCOUNT ON if object_id('temp') is not null begin drop table temp end SELECT * into temp FROM @TVP; G

批量数据插入高效 转发

public static void insert() { // 开时时间 Long begin = new Date().getTime(); // sql前缀 String prefix = "INSERT INTO tb_big_data (count, create_time, random) VALUES "; try { // 保存sql后缀 StringBuffer suffix = new StringBuffer(); // 设置事务为非自动提交 conn.setAu

SqlParameter 事务 批量数据插入

不错,很好,以后防注入批量事务提交虽然麻烦点研究了几个小时,但不会是问题了 1 SqlCommand cmd; 2 HelpSqlServer helps = new HelpSqlServer(); 3 //定义SqlParameter数组 4 SqlParameter[] param = new SqlParameter[4]; 5 6 7 protected void Page_Load(object sender, EventArgs e) 8 { 9 var strsql = "&qu

使用事务和SqlBulkCopy批量插入数据

SqlBulkCopy是.NET Framework 2.0新增的类,位于命名空间System.Data.SqlClient下,主要提供把其他数据源的数据有效批量的加载到SQL Server表中的功能.类似与 Microsoft SQL Server 包中名为 bcp 的命令行应用程序.但是使用 SqlBulkCopy 类可以编写托管代码解决方案,性能上优于bcp命令行应用程序,更优于如Insert方式向SQL Server表加载大量数据.SqlBulkCopy可以应用到大批量数据的转移上,而不

批量数据入库

下面主要介绍数据库批量操作数据(主要是 Insert)的方法,涉及 SQL Server.DB2.MySQL 等. SQL Server 首先,准备工作,新建一个数据库实例 在数据库实例中新建一张数据表 自认而然,最常用的是普通的 insert 方法,可以插入一条或多条数据 但是,在大数据量的情况下,普通的 insert 方法插入批量数据执行太慢. 参见:.NET批量大数据插入性能分析及比较: 下面提供 2 种方法,提高批量数据插入效率: (1)SqlBulkCopy .Net 2.0 提供 S

ADO.NET 新特性之SqlBulkCopy(批量插入大量数据)

转自:http://blog.csdn.net/huaer1011/article/details/2312361 在.Net1.1中无论是对于批量插入整个DataTable中的所有数据到数据库中,还是进行不同数据源之间的迁移,都不是很方便.而在.Net2.0中,SQLClient命名空间下增加了几个新类帮助我们通过DataTable或DataReader批量迁移数据.数据源可以来自关系数据库或者XML文件,甚至WebService返回结果.其中最重要的一个类就是SqlBulkCopy类,使用它

C#中的SqlBulkCopy批量插入数据

在C#中,我们可以使用sqlBulkCopy去批量插入数据,其他批量插入方法不在讨论. 1 /// <summary> 2 /// SqlBulkCopy批量插入数据 3 /// </summary> 4 /// <param name="connectionStr">链接字符串</param> 5 /// <param name="dataTableName">表名</param> 6 ///