笔记整理之,将excel中数量批量导入数据库对应表

By admin in 美高梅手机版4858 on 2019年5月3日

find . -name “*.bcp” | xargs rm -rf “*.bcp”

事先贰篇日志整理了BCP大致的用法,本次整治一下它的汉子儿 Bulk Insert
的写法以及和bcp那边的3结合的用法。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.OleDb;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Configuration;
using System.IO;
using System.Data.SqlClient;

using System;
笔记整理之,将excel中数量批量导入数据库对应表。using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.OleDb;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Configuration;
using System.IO;
using System.Data.SqlClient;

首先,Bulk Insert 语句要在连年了Sql Server 服务器之后才实行的,和bcp
不平等,bcp 是以命令来举办,而Bulk Insert 相当于3个实践贰个操作语句

namespace ImportExcelToSqlServer
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
/// <summary>
/// tb1:职业簿名称 tb二:须求导入的数据库表名 tb三:数据库连接字符串
/// </summary>
/// <param name=”sender”></param>
/// <param name=”e”></param>
private void btn_Import_Click(object sender, EventArgs e)
{
//string connString =
ConfigurationManager.ConnectionStrings[“connStr”].ConnectionString.ToString();
string connString = tb3.Text;
System.Windows.Forms.OpenFileDialog fd = new OpenFileDialog();
if (fd.ShowDialog() == DialogResult.OK)
{
TransferData(fd.FileName, tb1.Text, connString);
}
}
public void TransferData(string strCon, string sheetName, string
connectionString)
{
DataSet ds = new DataSet();
try
{
string connStr = “Provider=Microsoft.Jet.OLEDB.4.0;” + “Data Source=” +
strCon + “;” + “;Extended Properties=\”Excel 8.0;HDR=YES;IMEX=1\””;
//获取sheet页全体多少
OleDbConnection conn = new OleDbConnection(connStr);
conn.Open();
string strExcel = “”;
OleDbDataAdapter myCommand = null;
strExcel = string.Format(“select * from [{0}$]”, sheetName);
myCommand = new OleDbDataAdapter(strExcel, connStr);
myCommand.Fill(ds, sheetName);
using (System.Data.SqlClient.SqlBulkCopy bcp = new
System.Data.SqlClient.SqlBulkCopy(connectionString))
{
DataTable dt = ds.Tables[0];
bcp.BatchSize = 100;//每一次传输的行数
bcp.NotifyAfter = 100;//进度提示的行数
bcp.DestinationTableName = tb2.Text;//供给导入的数据库表名

namespace ImportExcelToSqlServer
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
/// <summary>
/// tb一:专门的工作簿名称 tb②:需求导入的数据库表名 tb三:数据库连接字符串
/// </summary>
/// <param name=”sender”></param>
/// <param name=”e”></param>
private void btn_Import_Click(object sender, EventArgs e)
{
//string connString =
ConfigurationManager.ConnectionStrings[“connStr”].ConnectionString.ToString();
string connString = tb3.Text;
System.Windows.Forms.OpenFileDialog fd = new OpenFileDialog();
if (fd.ShowDialog() == DialogResult.OK)
{
TransferData(fd.FileName, tb1.Text, connString);
}
}
public void TransferData(string strCon, string sheetName, string
connectionString)
{
DataSet ds = new DataSet();
try
美高梅手机版4858 ,{
string connStr = “Provider=Microsoft.Jet.OLEDB.4.0;” + “Data Source=” +
strCon + “;” + “;Extended Properties=\”Excel 8.0;HDR=YES;IMEX=1\””;
//获取sheet页全体数据
OleDbConnection conn = new OleDbConnection(connStr);
conn.Open();
string strExcel = “”;
OleDbDataAdapter myCommand = null;
strExcel = string.Format(“select * from [{0}$]”, sheetName);
myCommand = new OleDbDataAdapter(strExcel, connStr);
myCommand.Fill(ds, sheetName);
using (System.Data.SqlClient.SqlBulkCopy bcp = new
System.Data.SqlClient.SqlBulkCopy(connectionString))
{
DataTable dt = ds.Tables[0];
bcp.BatchSize = 100;//每回传输的行数
bcp.NotifyAfter = 拾0;//进程提醒的行数
bcp.DestinationTableName = tb二.Text;//须要导入的数据库表名

然后这里列举一下Bulk Insert 的用法,和对应bcp 的参数的应和关系。

//excel表头与数量库列对应涉及
bcp.ColumnMappings.Add(“物料编码”, “CODE”);
bcp.ColumnMappings.Add(“物料名称”, “NAME”);
bcp.ColumnMappings.Add(“状态”, “STATUS”);
bcp.ColumnMappings.Add(“物料表明”, “MEMO”);
bcp.ColumnMappings.Add(“创设人帐号”, “CREATO中华V”);
bcp.ColumnMappings.Add(“创设时间”, “CREATEDATE”);
bcp.ColumnMappings.Add(“计量单位”, “Unit”);
bcp.ColumnMappings.Add(“材质”, “Material”);
bcp.ColumnMappings.Add(“仓库储存最大批量”, “StockUp”);
bcp.ColumnMappings.Add(“仓库储存最小量”, “StockDown”);
bcp.ColumnMappings.Add(“体系编码”, “MATE昂科雷STBMWX伍ING壹”);
bcp.ColumnMappings.Add(“规格”, “MATERSTRING2”);
bcp.ColumnMappings.Add(“型号”, “MATERSTRING3”);
bcp.ColumnMappings.Add(“助记码”, “MATERSTRING4”);
bcp.ColumnMappings.Add(“提报单位编码”, “MATERST汉兰达ING5”);
bcp.ColumnMappings.Add(“种类编码”, “MATEQashqaiSTMuranoING陆”);
bcp.WriteToServer(dt);
MessageBox.Show(“成功”);
}
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
}
}

//excel表头与数码库列对应涉及
bcp.ColumnMappings.Add(“物料编码”, “CODE”);
bcp.ColumnMappings.Add(“物料名称”, “NAME”);
bcp.ColumnMappings.Add(“状态”, “STATUS”);
bcp.ColumnMappings.Add(“物料表达”, “MEMO”);
bcp.ColumnMappings.Add(“创造人帐号”, “CREATO兰德Tucson”);
bcp.ColumnMappings.Add(“创立时间”, “CREATEDATE”);
bcp.ColumnMappings.Add(“计量单位”, “Unit”);
bcp.ColumnMappings.Add(“材质”, “Material”);
bcp.ColumnMappings.Add(“库存最大批量”, “StockUp”);
bcp.ColumnMappings.Add(“仓库储存最一丢丢”, “StockDown”);
bcp.ColumnMappings.Add(“体系编码”, “MATE冠道ST奥迪Q3ING1”);
bcp.ColumnMappings.Add(“规格”, “MATERSTRING2”);
bcp.ColumnMappings.Add(“型号”, “MATERSTRING3”);
bcp.ColumnMappings.Add(“助记码”, “MATERSTRING4”);
bcp.ColumnMappings.Add(“提报单位编码”, “MATE中华VST凯雷德ING五”);
bcp.ColumnMappings.Add(“连串编码”, “MATE汉兰达ST卡宴ING6”);
bcp.WriteToServer(dt);
MessageBox.Show(“成功”);
}
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
}
}

bulk insert t4
from ‘D:\t3.txt’
with(
DataFileType = ‘char’ — DataFileType选项帮衬char|native|widechar|widenative 相对应的bcp接口正是 -c|-n|-w|-N
,BatchSize = 1 –BatchSize 相当于bcp里面包车型大巴 -b 选项,每一次交互多少行数据
,FieldTerminator = ‘ ‘ –FieldTerminator 也正是bcp
里面包车型地铁-t选项,标志同1行数据之中的列分割
,RowTerminator = ‘\r\n’ –RowTerminator 也等于bcp里面包车型地铁 -r
选项,标志区别行数据里面包车型大巴行分割
,ForMatFile = ‘D:\format.xml’ –FormatFile 也正是bcp 里面包车型大巴 -f
选项,使用陈设文件进行批量导入数据,将适用以下情况
–(一、文件的列比表的列多 二、列顺序和多少库列顺序不壹致 )
,KeepIdentity –KeepIdentity 相当于bcp 里面包车型地铁 -E
选项,表示保留导入数据的标记列的数码
,KeepNulls –KeepNulls 相当于 bcp 里面的-k选项,保留导入数据的Null值,不调换到列的私下认可值
,FirstRow = 贰 –FirstRow 约等于 bcp 里面包车型客车 -F 选项,表示早先导入的首行
,LastRow = 四 –LastRow 相当于 bcp 里面包车型地铁 -L 选项,表示导入的尾行
,Check_Constraints –是不是检查表中约束,若是未有该选项,那么忽略
,codePage = ‘850’ –相当于bcp 里面的-C 选项
)

 

假定从前用过bcp 那个相应也远非什么样大的难题。

上述with
之后的具有选项其实都能够不填的,若是要填的话,能够参考官方网站或然自身背后的讲授。

里面三个相比注意的是formatfile
那个选项,如果导入的文件和对象的表的列顺序大概列数分化等的时候,那么就要求使用formatflie
来告诉数据库数据怎么摆位,如果是想省点事足以先选拔bcp
来生成三个格式化文件先,无论是非xm文件大概xml文件都能够支撑。生成之后修改对应的项就可以。

 

别的,bcp 里面是尚未Check_Constraints 那一个选项的,不过BulkInsert
这里能够支撑,使用那么些选项也足以更加好地保管导入数据的数据完整性。

别的的参数和接纳,都和bcp里面找到呼应的章程,应用也接近。这里也没供给再一次重新了~

此番分享到此地

 

 

 

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图
Copyright @ 2010-2019 美高梅手机版4858 版权所有