问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

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:下面填入你的数据库的账号和...

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
电脑开机时怎么进入安全模式 广东医学院大一新生宿舍怎么样,是不是都是学校分配,不能自己选择_百度... 2012高考理科 考到545 想知道怎么填志愿 我的分数545可以报广东医学院边d专业?我系广东考生 高考排名。高考报志愿。广东医学院。 今年545分补录广东医学院还有机会吗? 徒步穿什么鞋 夫妻之间感情再不好都不要去互相伤害 平时可以穿登山鞋吗 大学生都爱去哪些网站? 十大元帅分别有谁(包括排名),职务各是什么? 超燃冲压发动机可以在哪些领域应用 类似超燃冲压发动机或者脉冲发动机甚至喷气式发动机产生足够强大推进力使战机突破大气层后进行无动力巡航 中央文明委主任 跟中纪委书记 哪个大 有谁知道超燃冲压发动机和脉冲爆震发动机? 脉冲爆震和超燃冲压哪个更有发展潜力 超燃冲压发动机是什么? 中国又能力制造超燃冲压发动机吗 超燃冲压发动机为什么会有动力 超燃冲压发动机和亚燃冲压发动机的区别 “月结”是什么意思?比如月结60天是怎样个付款方式呢? 支付方式月结是什么意思? 苹果手机为什么有些wifi搜索不到就是为什么苹果手机搜索不到Wi-Fi王子... 电焊机工作原理的线路介绍 湖南永州江华的经纬度的多少? 中国湖南耒阳坛下经纬度是多少? 湖南省花垣县经纬度是多少? 谁帮我查下出生经度纬度,湖南省邵阳市塘田市镇 湖南省永州市冷水滩三公里的经纬度 湖南省平江县经纬度 我国超燃冲压发动机将军用,一旦军用飞机会变成怎样 中央政治局候补委员和副总理谁排名在前? 中国什么时候能造出使用超燃冲压发动机的武器? 变循环发动机的推力比高吗?超然冲压发动机呢? 谁知道官员级别排名啊?例如正局级,厅级等等 x-43a和x-37b有什么区别?~ 国家公务员级别排行从高到低 中国超燃冲压发动机技术如何? 为何冲压发动机不用于飞机 超然冲压发动机是如何吸入气体,它并没有像涡扇发动机的风扇 超燃冲压引擎和冲压引擎的区别? 超燃冲压发动机是什么原理 债务重组是会计行为还是非会计行为? IP地址后面的数字是什么 我今天化妆了,可是没带洗面奶,怎么样才能把脸洗干净啊 IP地址192.168.1.0代表()。 女生说我化妆了我怎么回? 请教下,新会计准则规定的债务重组收益应当直接计入当前损益是否合理?为什么? 我今天化妆口红很重 我男朋友说我涂的太红了 他不想我化妆为什么? 债务重组-延长还款期限算不算实质让步