将Excel数据批量插入数据库的常用方法
2010-12-20 16:25
656 查看
一、结合EntityFramework进行的简单实现
static void LoadExcel(){
string filePath = @"E:\Excel目录\";
LoadFileTree(filePath);
}
static void LoadFileTree(string filePath)
{
string connString = "server=localhost;uid=sa;pwd=qaz~123;database=MedicalSearch";
System.IO.DirectoryInfo di = new DirectoryInfo(filePath);
var _query = di.GetFiles();
foreach (var _ary in _query)
{
TransferData(_ary.FullName, _ary.Name, "sheet1", connString);
}
}
static void TransferData(string excelFile, string fileName, string sheetName, string connectionString)
{
DataSet ds = new DataSet();
try
{
//获取全部数据
string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + excelFile + ";" + "Extended Properties=Excel 8.0;";
string strExcel = string.Empty;
OleDbDataAdapter myCommand = null;
using (OleDbConnection conn = new OleDbConnection(strConn))
{
strExcel = string.Format("select * from [{0}$]", sheetName);
myCommand = new OleDbDataAdapter(strExcel, strConn);
myCommand.Fill(ds, sheetName);
var _source = ds.Tables[0];
int _count = ds.Tables[0].Rows.Count;
MedicalSearchEntities _msEntities = new MedicalSearchEntities();
for (int i = 0; i < _count; i++)
{
MS_Agencies _msA = new MS_Agencies();
_msA.Name = _source.Rows[i][0].ToString();
_msA.Levels = _source.Rows[i][1].ToString();
_msA.Nature = _source.Rows[i][2].ToString();
_msA.Address = _source.Rows[i][3].ToString();
_msA.Phone = _source.Rows[i][4].ToString();
_msA.Remark = _source.Rows[i][5].ToString();
_msA.Region = (fileName.Remove(6));
_msEntities.MS_Agencies.AddObject(_msA);
_msEntities.SaveChanges();
}
}
}
catch (Exception e)
{
Console.WriteLine(e.ToString());
}
}
二、用System.Data.SqlClient命名空间自带的方法SqlBulkCopy同步插入数据(官方说明此方法比较高效)
//如果目标表不存在则创建
string strSql = string.Format("if object_id('{0}') is null create table {0}(", sheetName);
foreach (System.Data.DataColumn c in ds.Tables[0].Columns)
{
strSql += string.Format("[{0}] varchar(255),", c.ColumnName);
}
strSql = strSql.Trim(',') + ")";
using (System.Data.SqlClient.SqlConnection sqlconn = new System.Data.SqlClient.SqlConnection(connectionString))
{
sqlconn.Open();
System.Data.SqlClient.SqlCommand command = sqlconn.CreateCommand();
command.CommandText = strSql;
command.ExecuteNonQuery();
sqlconn.Close();
}
//用bcp导入数据
using (System.Data.SqlClient.SqlBulkCopy bcp = new System.Data.SqlClient.SqlBulkCopy(connectionString))
{
bcp.SqlRowsCopied += new System.Data.SqlClient.SqlRowsCopiedEventHandler(bcp_SqlRowsCopied);
bcp.BatchSize = 100;//每次传输的行数
bcp.NotifyAfter = 100;//进度提示的行数
bcp.DestinationTableName = sheetName;//目标表
bcp.WriteToServer(ds.Tables[0]);
}
static void LoadExcel(){
string filePath = @"E:\Excel目录\";
LoadFileTree(filePath);
}
static void LoadFileTree(string filePath)
{
string connString = "server=localhost;uid=sa;pwd=qaz~123;database=MedicalSearch";
System.IO.DirectoryInfo di = new DirectoryInfo(filePath);
var _query = di.GetFiles();
foreach (var _ary in _query)
{
TransferData(_ary.FullName, _ary.Name, "sheet1", connString);
}
}
static void TransferData(string excelFile, string fileName, string sheetName, string connectionString)
{
DataSet ds = new DataSet();
try
{
//获取全部数据
string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + excelFile + ";" + "Extended Properties=Excel 8.0;";
string strExcel = string.Empty;
OleDbDataAdapter myCommand = null;
using (OleDbConnection conn = new OleDbConnection(strConn))
{
strExcel = string.Format("select * from [{0}$]", sheetName);
myCommand = new OleDbDataAdapter(strExcel, strConn);
myCommand.Fill(ds, sheetName);
var _source = ds.Tables[0];
int _count = ds.Tables[0].Rows.Count;
MedicalSearchEntities _msEntities = new MedicalSearchEntities();
for (int i = 0; i < _count; i++)
{
MS_Agencies _msA = new MS_Agencies();
_msA.Name = _source.Rows[i][0].ToString();
_msA.Levels = _source.Rows[i][1].ToString();
_msA.Nature = _source.Rows[i][2].ToString();
_msA.Address = _source.Rows[i][3].ToString();
_msA.Phone = _source.Rows[i][4].ToString();
_msA.Remark = _source.Rows[i][5].ToString();
_msA.Region = (fileName.Remove(6));
_msEntities.MS_Agencies.AddObject(_msA);
_msEntities.SaveChanges();
}
}
}
catch (Exception e)
{
Console.WriteLine(e.ToString());
}
}
二、用System.Data.SqlClient命名空间自带的方法SqlBulkCopy同步插入数据(官方说明此方法比较高效)
//如果目标表不存在则创建
string strSql = string.Format("if object_id('{0}') is null create table {0}(", sheetName);
foreach (System.Data.DataColumn c in ds.Tables[0].Columns)
{
strSql += string.Format("[{0}] varchar(255),", c.ColumnName);
}
strSql = strSql.Trim(',') + ")";
using (System.Data.SqlClient.SqlConnection sqlconn = new System.Data.SqlClient.SqlConnection(connectionString))
{
sqlconn.Open();
System.Data.SqlClient.SqlCommand command = sqlconn.CreateCommand();
command.CommandText = strSql;
command.ExecuteNonQuery();
sqlconn.Close();
}
//用bcp导入数据
using (System.Data.SqlClient.SqlBulkCopy bcp = new System.Data.SqlClient.SqlBulkCopy(connectionString))
{
bcp.SqlRowsCopied += new System.Data.SqlClient.SqlRowsCopiedEventHandler(bcp_SqlRowsCopied);
bcp.BatchSize = 100;//每次传输的行数
bcp.NotifyAfter = 100;//进度提示的行数
bcp.DestinationTableName = sheetName;//目标表
bcp.WriteToServer(ds.Tables[0]);
}
相关文章推荐
- [技巧]把Excel里的数据插入到数据库里的方法
- excel导入数据库:SQL Server数据库中成批导入数据的几个常用方法
- asp实现批量插入表单中的数据到数据库的方法
- Java实现批量导入excel表格数据到数据库中的方法
- 批量插入excel数据到数据库中的小例子
- 数据库中批量插入数据的方法
- asp实现批量插入表单中的数据到数据库的方法
- PHP批量导入excel数据到数据库简易版方法(From Jeskitt)
- 数据库中批量插入数据的方法,记录一下。
- C# 将DataTable表中的数据批量插入到数据库表中的方法
- C++向Excel数据库中创建、插入数据
- 几种数据库的大数据批量插入【转】
- asp向数据库插入数据的方法rs
- C# 数据批量插入到数据库SqlBulkCopy(源数据类型:List<T> Or DataTable)
- PHP将Excel导入数据库及数据库数据导出至Excel的方法
- 向数据库中插入数据的另一个方法 按id号的大小插入
- asp.net 读取Excel数据并将数据插入到数据库中
- mysql 批量插数据到数据库以及返回插入生成的id号
- 用C#编程从数据库中读取图片数据导进Excel文件的方法