DataTable dt = new DataTable();
dt.Columns.Add("Name");
dt.Columns.Add("Age");
for (int i = 0; i < 80000; i++)
{
DataRow row = dt.NewRow();
row["Name"] = "aa" + i;
row["Age"] = i * i;
dt.Rows.Add(row);
}
using (SqlBulkCopy bulkCopy = new SqlBulkCopy(connstr))
{
bulkCopy.DestinationTableName = "T_Persons";
bulkCopy.ColumnMappings.Add("Name", "Name");
bulkCopy.ColumnMappings.Add("Age", "Age");
bulkCopy.WriteToServer(dt);
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data.SqlClient;
using System.IO;
using System.Data;
namespace 手机号码归属地查询SQL
{
class Program
{
static void Main(string[] args)
{
using (SqlConnection conn = SqlHelper.CreatConnection())
using (SqlTransaction tx = conn.BeginTransaction())
{
try
{
using (Stream fs = File.OpenRead(@"F:\如鹏网.Net训练营\Test\Net基础2\Test_ADONet_20150301\手机号码归属地查询SQL\导入资料\2014年7月份手机号码归属地数据库.csv"))
using (StreamReader reader = new StreamReader(fs, Encoding.Default))
{
reader.ReadLine();
string line;
DataTable dt = new DataTable();
dt.Columns.Add("MobileNumber");
dt.Columns.Add("MobileArea");
dt.Columns.Add("MobileType");
while ((line = reader.ReadLine()) != null)
{
if (string.IsNullOrEmpty(line))
{
break;
}
string[] lines = line.Split(',');
string MobileNumber = lines[1].Trim('"');
string MobileArea = lines[2].Trim('"');
string MobileType = lines[3].Trim('"');
DataRow row = dt.NewRow();
row["MobileNumber"] = MobileNumber;
row["MobileArea"] = MobileArea;
row["MobileType"] = MobileType;
dt.Rows.Add(row);
}
using (SqlBulkCopy bulkCopy = new SqlBulkCopy(conn, SqlBulkCopyOptions.Default, tx))
{
bulkCopy.DestinationTableName = "T_MobileAreas";
bulkCopy.ColumnMappings.Add("MobileNumber", "MobileNumber");
bulkCopy.ColumnMappings.Add("MobileArea", "MobileArea");
bulkCopy.ColumnMappings.Add("MobileType", "MobileType");
bulkCopy.WriteToServer(dt);
}
Console.WriteLine("成功导入 " + dt.Rows.Count + " 条数据");
}
tx.Commit();
}
catch (Exception ex)
{
tx.Rollback();
Console.WriteLine("导入数据出错:"+ex);
}
}
Console.ReadKey();
}
}
}
其他参考资料:
殊途同归,ado.net快速实现MySql的CRUD
自用类库整理之SqlHelper和MySqlHelper
SqlHelper
- ExecuteEmptyDataTable
获取空表结构,主要用于需要构造DataTable进行大批量数据插入时使用 - BulkInsert
大批量数据插入,使用SqlBulkCopy进行大批量数据导入,仅提供了DataTable方式,需要DataReader的请自行重载 - BatchUpdate
批量数据更新、插入,使用SqlDataAdapter实现,需要进行较大数据量更新、插入时可以使用此方法,性能还不错 - BatchUpdate,BatchDelete
分批次批量删除、更新数据,此方法应用场景较少,用于需要删除、更新大量数据的同时不造成数据库阻塞且不影响数据库订阅、复制延时等 - ExecutePageDataTable
通用的分页方法,提供了CTE表达式的支持 - SqlHelperExtension.cs(ExecuteObject、ExecuteObjects)
提供了泛型获取对象方法支持,依赖依赖AutoMapper.dll实现,非常在意性能的慎用 - SqlHelperSchemaExtension.cs
SqlServer获取数据库、表、索引信息的封装,可以用来辅助写自己的代码生成器,查看数据库索引之类的
MySqlHelper
-
- ExecuteEmptyDataTable
获取空表结构,主要用于需要构造DataTable进行大批量数据插入时使用 - BulkInsert
使用MySqlBulkLoader进行大批量数据导入,仅提供了DataTable方式,需要DataReader的请自行重载 - BatchUpdate
批量数据更新、插入,使用MySqlDataAdapter实现,需要进行较大数据量更新、插入时可以使用此方法,性能还不错 - MySqlHelperExtension.csExecuteObject、ExecuteObjects
提供了泛型获取对象方法支持,依赖依赖AutoMapper.dll实现,非常在意性能的慎用
- ExecuteEmptyDataTable