01Sql批量插入
实验发现用一下方法时间并不是真的很短。
原因:数据库连接池:ado.net会尽可能的服用连接池中的链接
using (SqlConnection conn = new SqlConnection(connStr))
{
conn.Open();
for (int i = 0; i < lines.Length;i++ )
//foreach (string line in lines)
{
string line = lines[i];//foreach循环中没有这一行。
string[] strs = line.Split('\t');//转义字符\t表示tap
string startTelNum = strs[0];
string city = strs[1];
city = city.Trim('"');//去掉两边的双引号
string telType = strs[2];
telType = telType.Trim('"');
using (SqlCommand cmd = conn.CreateCommand())
{
cmd.CommandText = @"insert into T_TelNum(StartTelNum,TelType,TelArea)
values(@StartTelNum,@TelType,@TelArea)";
cmd.Parameters.Add(new SqlParameter("@StartTelNum", startTelNum));
cmd.Parameters.Add(new SqlParameter("@TelType", telType));
cmd.Parameters.Add(new SqlParameter("@TelArea", city));
cmd.ExecuteNonQuery();
}
TimeSpan ts = DateTime.Now - startTime;//时间段相减得到TimeSpan类型
double ellapseSec=ts.TotalSeconds;//已经耗用的秒数
double totalSec = (ellapseSec / (i + 1)) * lines.Length;//计算机编程中,先乘后除
}
使用SqlbulkCopy批量插入数据
private void button1_Click(object sender, RoutedEventArgs e)
{
string connStr = ConfigurationManager.ConnectionStrings["dbConnStr"].ConnectionString;
OpenFileDialog ofd = new OpenFileDialog();
ofd.Filter = "文本文件|*.txt";
if (ofd.ShowDialog() == false)
{
return;
}
string[] lines = File.ReadLines(ofd.FileName, Encoding.Default).ToArray();
DateTime startTime = DateTime.Now;
DataTable table=new DataTable();//第一步在内存中处理数据,没有加入数据库
table.Columns.Add("StartTelNum");
table.Columns.Add("City");
table.Columns.Add("Teltype");
for (int i = 0; i < lines.Length; i++)
//foreach (string line in lines)
{
string line = lines[i];//foreach循环中没有这一行。
string[] strs = line.Split('\t');//转义字符\t表示tap
string startTelNum = strs[0];
string city = strs[1];
city = city.Trim('"');//去掉两边的双引号
string telType = strs[2];
telType = telType.Trim('"');
DataRow row=table.NewRow();//创建一个DataRow对象
row["StartTelNum"]=startTelNum;//一定要在之前table.Columns.Add("StratTelNum");
row["City"]=city;
row["TelType"]=telType;
table.Rows.Add(row);//只创建,没有添加数据。
}
using (SqlBulkCopy bulkCopy = new SqlBulkCopy(connStr))//第二步将数据加入到数据库中
{
bulkCopy.DestinationTableName = "T_Telnum";
bulkCopy.ColumnMappings.Add("StartTelNum", "StartTelNum");
bulkCopy.ColumnMappings.Add("City", "TelArea");//用bulkCopy.ColumnMappings.Add()建立数据中那一列与表中的对数据库应列的对应关系
bulkCopy.ColumnMappings.Add("Teltype", "TelType");
bulkCopy.WriteToServer(table);
}
MessageBox.Show("accomplish");
}
在数据库中,NULL和空字符串以及0都不一样。NULL表示不知道。
查找是NULL:select * from T_student where Name is NULL
实验发现用一下方法时间并不是真的很短。
原因:数据库连接池:ado.net会尽可能的服用连接池中的链接
using (SqlConnection conn = new SqlConnection(connStr))
{
conn.Open();
for (int i = 0; i < lines.Length;i++ )
//foreach (string line in lines)
{
string line = lines[i];//foreach循环中没有这一行。
string[] strs = line.Split('\t');//转义字符\t表示tap
string startTelNum = strs[0];
string city = strs[1];
city = city.Trim('"');//去掉两边的双引号
string telType = strs[2];
telType = telType.Trim('"');
using (SqlCommand cmd = conn.CreateCommand())
{
cmd.CommandText = @"insert into T_TelNum(StartTelNum,TelType,TelArea)
values(@StartTelNum,@TelType,@TelArea)";
cmd.Parameters.Add(new SqlParameter("@StartTelNum", startTelNum));
cmd.Parameters.Add(new SqlParameter("@TelType", telType));
cmd.Parameters.Add(new SqlParameter("@TelArea", city));
cmd.ExecuteNonQuery();
}
TimeSpan ts = DateTime.Now - startTime;//时间段相减得到TimeSpan类型
double ellapseSec=ts.TotalSeconds;//已经耗用的秒数
double totalSec = (ellapseSec / (i + 1)) * lines.Length;//计算机编程中,先乘后除
}
使用SqlbulkCopy批量插入数据
private void button1_Click(object sender, RoutedEventArgs e)
{
string connStr = ConfigurationManager.ConnectionStrings["dbConnStr"].ConnectionString;
OpenFileDialog ofd = new OpenFileDialog();
ofd.Filter = "文本文件|*.txt";
if (ofd.ShowDialog() == false)
{
return;
}
string[] lines = File.ReadLines(ofd.FileName, Encoding.Default).ToArray();
DateTime startTime = DateTime.Now;
DataTable table=new DataTable();//第一步在内存中处理数据,没有加入数据库
table.Columns.Add("StartTelNum");
table.Columns.Add("City");
table.Columns.Add("Teltype");
for (int i = 0; i < lines.Length; i++)
//foreach (string line in lines)
{
string line = lines[i];//foreach循环中没有这一行。
string[] strs = line.Split('\t');//转义字符\t表示tap
string startTelNum = strs[0];
string city = strs[1];
city = city.Trim('"');//去掉两边的双引号
string telType = strs[2];
telType = telType.Trim('"');
DataRow row=table.NewRow();//创建一个DataRow对象
row["StartTelNum"]=startTelNum;//一定要在之前table.Columns.Add("StratTelNum");
row["City"]=city;
row["TelType"]=telType;
table.Rows.Add(row);//只创建,没有添加数据。
}
using (SqlBulkCopy bulkCopy = new SqlBulkCopy(connStr))//第二步将数据加入到数据库中
{
bulkCopy.DestinationTableName = "T_Telnum";
bulkCopy.ColumnMappings.Add("StartTelNum", "StartTelNum");
bulkCopy.ColumnMappings.Add("City", "TelArea");//用bulkCopy.ColumnMappings.Add()建立数据中那一列与表中的对数据库应列的对应关系
bulkCopy.ColumnMappings.Add("Teltype", "TelType");
bulkCopy.WriteToServer(table);
}
MessageBox.Show("accomplish");
}
在数据库中,NULL和空字符串以及0都不一样。NULL表示不知道。
查找是NULL:select * from T_student where Name is NULL