C#中如何将Excel中的数据批量导入到sql server?
发布网友
发布时间:2022-04-07 20:37
我来回答
共2个回答
懂视网
时间:2022-04-08 00:59
第一种方法:
Insert
部分数据还ok 批量数据性能问题。
第二种方法:
sqlbulkcopy 方法 主要思想 是在客户端将数据缓存到datatable里面,然后用sqlbulkcopy 一次性将数据插入到数据库表中
方法如下:
System.Data.SqlClient.SqlBulkCopy bcp = new System.Data.SqlClient.SqlBulkCopy(connectionString);
//指定目标数据库的表名
bcp.DestinationTableName = "resulttable";
//建立数据源表字段和目标表中的列之间的映射
bcp.ColumnMappings.Add("sheetname", "sheetname");
bcp.ColumnMappings.Add("meters", "公里标");
bcp.ColumnMappings.Add("twista", "twista");
//写入数据库表 dt 是数据源DataTable
bcp.WriteToServer(dt);
//关闭SqlBulkCopy实例
bcp.Close();
如果主键冲突会回滚插入操作,所以要么保证无冲突要么建临时表!
第三种方法:
表值参数 tvps 需要先在sql上建立表值参数
--Create DataBase
create database BulkTestDB;
go
use BulkTestDB;
go
--Create Table
Create table BulkTestTable(
Id int primary key,
UserName nvarchar(32),
Pwd varchar(16))
go
--Create Table Valued
CREATE TYPE BulkUdt AS TABLE
(Id int,
UserName nvarchar(32),
Pwd varchar(16))
public static void TableValuedToDB(DataTable dt)
{
SqlConnection sqlConn = new SqlConnection(
ConfigurationManager.ConnectionStrings["ConnStr"].ConnectionString);
const string TSqlStatement =
"insert into BulkTestTable (Id,UserName,Pwd)" +
" SELECT nc.Id, nc.UserName,nc.Pwd" +
" FROM @NewBulkTestTvp AS nc";
SqlCommand cmd = new SqlCommand(TSqlStatement, sqlConn);
SqlParameter catParam = cmd.Parameters.AddWithValue("@NewBulkTestTvp", dt);
catParam.SqlDbType = SqlDbType.Structured;
//表值参数的名字叫BulkUdt,在上面的建立测试环境的SQL中有。
catParam.TypeName = "dbo.BulkUdt";
try
{
sqlConn.Open();
if (dt != null && dt.Rows.Count != 0)
{
cmd.ExecuteNonQuery();
}
}
catch (Exception ex)
{
throw ex;
}
finally
{
sqlConn.Close();
}
}
datatable序列化成json
调用jsonnet库
jsondata = JsonConvert.SerializeObject(dt, new DataTableConverter());
批量插入数据到sqlserver
标签:
热心网友
时间:2022-04-07 22:07
1.本文实现在c#中可高效的将excel数据导入到sqlserver数据库中,很多人通过循环来拼接sql,这样做不但容易出错而且效率低下,最好的办法是使用bcp,也就是System.Data.SqlClient.SqlBulkCopy 类来实现。不但速度快,而且代码简单,下面测试代码导入一个6万多条数据的sheet,包括读取(全部读取比较慢)在我的开发环境中只需要10秒左右,而真正的导入过程只需要4.5秒。
2.代码如下:
using System;
using System.Data;
using System.Windows.Forms;
using System.Data.OleDb;
namespace WindowsApplication2
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
//测试,将excel中的sheet1导入到sqlserver中
string connString = "server=localhost;uid=sa;pwd=sqlgis;database=master";
System.Windows.Forms.OpenFileDialog fd = new OpenFileDialog();
if (fd.ShowDialog() == DialogResult.OK)
{
TransferData(fd.FileName, "sheet1", connString);
}
}
public void TransferData(string excelFile, 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;";
OleDbConnection conn = new OleDbConnection(strConn);
conn.Open();
string strExcel = "";
OleDbDataAdapter myCommand = null;
strExcel = string.Format("select * from [{0}$]", sheetName);
myCommand = new OleDbDataAdapter(strExcel, strConn);
myCommand.Fill(ds, sheetName);
//如果目标表不存在则创建
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]);
}
}
catch (Exception ex)
{
System.Windows.Forms.MessageBox.Show(ex.Message);
}
}
//进度显示
void bcp_SqlRowsCopied(object sender, System.Data.SqlClient.SqlRowsCopiedEventArgs e)
{
this.Text = e.RowsCopied.ToString();
this.Update();
}
}
}
3.上面的TransferData基本可以直接使用,如果要考虑周全的话,可以用oledb来获取excel的表结构,并且加入ColumnMappings来设置对照字段,这样效果就完全可以做到和sqlserver的dts相同的效果了。
C#中如何将Excel中的数据批量导入到sql server
3.上面的TransferData基本可以直接使用,如果要考虑周全的话,可以用oledb来获取excel的表结构,并且加入ColumnMappings来设置对照字段,这样效果就完全可以做到和sqlserver的dts相同的效果了。
C#中如何将Excel中的数据批量导入到sql server
public void TransferData(string excelFile, 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;";OleDbConnection ...
怎么把Excel的内容导入到SQL Server数据库
1. 打开SQL Server Management Studio(SSMS)并连接到目标数据库实例。2. 在“对象资源管理器”窗口中,选择数据库中的目标表。3. 右键单击该表,在上下文菜单中选择“任务”>“导入数据”。4. 在“导入向导”对话框中,选择“Microsoft Excel”作为数据源,点击“下一步”。5. 在“Excel 文件路径...
怎样在C#中将excel表中的数据批量导入sqlserver数据库中?
把datatable插入sqlserver表
C#.NETExcel文件数据导入SQLServer数据库完整代码?
=== --将某个目录上的Excel表,导入到数据库中 --将所有的Excel文件放到一个目录中,假设为c: est,然后用下面的方法来做 createtable#t(fnamevarchar(260),depthint,isfbit)insertinto#texecmaster..xp_dirtree'c: est',1,1 declaretbcursorforselectfn='c: est'+fnamefrom#t whereisf=1and...
excel导入sqlserver 导入数据到sqlserver
将Excel中的数据导入到Sqlserver 这里以sql 2008为例 1、打开要导入的Excel文件,观察第一列是为字段还是数据 打开SQLServer,在需要导入的数据点击右键 【任务】-【导入数据】 出现导入导出向导。点击下一步 ,进入【选择数据源】页面,注意红框设置。点击下一步 ,进入【选择目标】页面,注意红框设置。...
怎样将EXCEL数据导入到sql中
1.打开SQL server,选择想要导入的数据库,依次点击:“数据库”右键-任务-导入数据 2.、选择来源的数据为Microsoft Excel,并选择Excel文件所在的位置 3.使用SQL server身份验证登录,选择相对应的数据库(系统会默认你最开始的所选择的数据库),;4.选择数据需要导入的表下,在查看数据类型时选择“忽略”...
将Excel中的数据导入到MSSQLServer2000
1、打开企业管理器,打开要导入数据的数据库,在表上按右键,所有任务--导入数据,弹出DTS导入/导出向导,按 下一步 ,2、选择数据源 Microsoft Excel 97-2000,文件名 选择要导入的xls文件,按 下一步 ,3、选择目的 用于SQL Server 的Microsoft OLE DB提供程序,服务器选择本地(如果是本地数据库...
怎么把excel文件里的数据导入SQL数据库?
1、首先双击打开sqlserver,右击需要导入数据的数据库,如图所示。2、点击任务,再点击任务中的导入数据选项,打开导入导出数据向导界面。3、在向导界面点击下一步,进入下图界面依次填写需要的内容:数据源Excel,文件路径,以及Excel版本,填好后点击下一步(如果Excel其他版本不行的话,就选择Excel97-03的...
怎样把excel的数据导入到sqlserver2000数据库中
1:先打开你的sqlserver企业管理器,找到你要准备导入的数据库,选择一个表,然后点击右键-所有任务-导入数据,跳过点击下一步:2:选择数据源,如下图:在这里选择Microsoft excel 97-2000,下面一项选择你要导入的excel文件,然后一直点击下一步,到最后点击完成就可以了!3:下面填入你的数据库的账号和...