自己测试了下,导入数十万条数据需要花费十几秒的时间。代码如下:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Configuration;
using System.IO;
using System.Data.SqlClient;
namespace shoujihaomachaxun
{
public partial class Form1 : Form
{
string dbconn = ConfigurationManager.ConnectionStrings["strSql"].ToString();
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
FolderBrowserDialog fbd = new FolderBrowserDialog();
if (fbd.ShowDialog() != DialogResult.OK)
{
return;
}
string path=fbd.SelectedPath;
string[] files=Directory.GetFiles(path,"*.txt",SearchOption.AllDirectories);
foreach(string file in files)
{
using (SqlConnection conn = new SqlConnection(dbconn))
{
using (SqlCommand cmd =conn.CreateCommand())
{
cmd.CommandText= "insert into phone(miphone,area,type,arphone) values(@mid,@ar,@ty,@arp)";
string lines = null;
string fname = Path.GetFileName(file);
string filename = Path.GetFileNameWithoutExtension(file);
using (FileStream filestream = File.OpenRead(file))
{
StreamReader reader = new StreamReader(file, Encoding.Default);
while ((lines = reader.ReadLine()) != null)
{
string[] strs = lines.Split('\t');
string miphone = strs[0].ToString();
string area = strs[1].ToString();
string type = strs[2].ToString();
string arphone = strs[3].ToString();
cmd.Parameters.Clear();
cmd.Parameters.Add(new SqlParameter("mid", miphone));
cmd.Parameters.Add(new SqlParameter("ar", area));
cmd.Parameters.Add(new SqlParameter("ty", type));
cmd.Parameters.Add(new SqlParameter("arp", arphone));
cmd.ExecuteNonQuery();
}
}
}
}
}
MessageBox.Show("导入成功!");
}
}
}
其实做批量数据导入的时候,可以用C# SqlBulkCopy的类进行写,这样可以大大提高导入的性能。