SqlBulkCopy的使用
时间:2021-07-01 10:21:17
帮助过:4人阅读
void btn_import_Click(
object sender, RoutedEventArgs e)
{
//先读取文件
//打开对话框,选择文件。
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 dtTable =
new DataTable();
//给表添加列
dtTable.Columns.Add(
"StartTellName");
dtTable.Columns.Add("TellType");
dtTable.Columns.Add("TellArea");
//遍历每一行数据,处理数据,添加到行(DataRow)中
foreach (
string line
in lines)
{
string[] strs = line.Split(
‘\t‘);
//\t制表符
string startTellNum = strs[
0];
string tellType = strs[
1].Trim(
‘"‘);
//去除两边的"
string tellArea = strs[
2].Trim(
‘"‘);
DataRow row =
dtTable.NewRow();
row["StartTellName"] = startTellNum;
//给字段赋值
row[
"TellType"] =
tellType;
row["TellArea"] =
tellArea;
dtTable.Rows.Add(row);//添加到一行中
}
//获取配置文件中连接字符串
string connstr = ConfigurationManager.ConnectionStrings[
"connstr"].ConnectionString;
//SqlBulkCopy是实现IDisposable接口的,所以必须用using
using (SqlBulkCopy bulk =
new SqlBulkCopy(connstr))
{
bulk.DestinationTableName =
"T_TellNum";
//指定表名
//本地列名与数据库列名建立连接
bulk.ColumnMappings.Add(
"StartTellName",
"starttellnum");
bulk.ColumnMappings.Add("TellType",
"telltype");
bulk.ColumnMappings.Add("TellArea",
"tellarea");
//把dtTable的数据写到数据库
bulk.WriteToServer(dtTable);
}
TimeSpan ts = DateTime.Now -
startTime;
//计算时间
MessageBox.Show(ts.ToString());
}
#code
4、数据库字段
id bigint primary key,
starttellnum nvarchar(30),
telltype nvarchar(30),
tellarea nvarchar(30),
5、可能遇到的问题
解决办法:请检查建立连接字段时字段名是否都正确。
解决方法
1,首先检查数据库表的字段是否过小
2,检查数据中是否有类似单引号的数据,做一下过滤
SqlBulkCopy的使用
标签: