如何高效的将excel导入sqlserver

php中文网
发布: 2016-06-07 15:04:15
原创
1263人浏览过

大部分人都知道用oledb来读取数据到dataset,但是读取之后怎么处理dataset就千奇百怪了。很多人通过循环来拼接sql,这样做不但容易出错而且效率低下,System.Data.SqlClient.SqlBulkCopy 对于新手来说还是比较陌生的,这个就是传说中效率极高的bcp,6万多数

大部分人都知道用oledb来读取数据到dataset,但是读取之后怎么处理dataset就千奇百怪了。很多人通过循环来拼接sql,这样做不但容易出错而且效率低下,System.Data.SqlClient.SqlBulkCopy 对于新手来说还是比较陌生的,这个就是传说中效率极高的bcp,6万多数据从excel导入到sql只需要4.5秒。

using System;<br> using System.Data;<br> using System.Windows.Forms;<br> using System.Data.OleDb;<br> namespace WindowsApplication2<br> {<br> public partial class Form1 : Form<br> {<br> public Form1()<br> {<br> InitializeComponent();<br> }<br><br> private void button1_Click(object sender, EventArgs e)<br> {<br> //测试,将excel中的sheet1<strong>导入</strong>到sqlserver中<br> string connString = "server=localhost;uid=sa;pwd=sqlgis;database=master";<br> System.Windows.Forms.OpenFileDialog fd = new OpenFileDialog();<br> if (fd.ShowDialog() == DialogResult.OK)<br> {<br> TransferData(fd.FileName, "sheet1", connString);<br> }<br> }<br><br> public void TransferData(string excelFile, string sheetName, string connectionString)<br> {<br> DataSet ds = new DataSet();<br> try<br> {<br> //获取全部数据<br> string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + excelFile + ";" + "Extended Properties=Excel 8.0;";<br> OleDbConnection conn = new OleDbConnection(strConn);<br> conn.Open();<br> string strExcel = "";<br> OleDbDataAdapter myCommand = null;<br> strExcel = string.Format("select * from [{0}$]", sheetName);<br> myCommand = new OleDbDataAdapter(strExcel, strConn);<br> myCommand.Fill(ds, sheetName);<br><br> //如果目标表不存在则创建<br> string strSql = string.Format("if object_id('{0}') is null create table {0}(", sheetName);<br> foreach (System.Data.DataColumn c in ds.Tables[0].Columns)<br> {<br> strSql += string.Format("[{0}] varchar(255),", c.ColumnName);<br> }<br> strSql = strSql.Trim(',') + ")";<br><br> using (System.Data.SqlClient.SqlConnection sqlconn = new System.Data.SqlClient.SqlConnection(connectionString))<br> {<br> sqlconn.Open();<br> System.Data.SqlClient.SqlCommand command = sqlconn.CreateCommand();<br> command.CommandText = strSql;<br> command.ExecuteNonQuery();<br> sqlconn.Close();<br> }<br> //用bcp<strong>导入</strong>数据<br> using (System.Data.SqlClient.SqlBulkCopy bcp = new System.Data.SqlClient.SqlBulkCopy(connectionString))<br> {<br> bcp.SqlRowsCopied += new System.Data.SqlClient.SqlRowsCopiedEventHandler(bcp_SqlRowsCopied);<br> bcp.BatchSize = 100;//每次传输的行数<br> bcp.NotifyAfter = 100;//进度提示的行数<br> bcp.DestinationTableName = sheetName;//目标表<br> bcp.WriteToServer(ds.Tables[0]);<br> }<br> }<br> catch (Exception ex)<br> {<br> System.Windows.Forms.MessageBox.Show(ex.Message);<br> }<br><br> }<br><br> //进度显示<br> void bcp_SqlRowsCopied(object sender, System.Data.SqlClient.SqlRowsCopiedEventArgs e)<br> {<br> this.Text = e.RowsCopied.ToString();<br> this.Update();<br> }<br><br><br> }<br> }

上面的TransferData基本可以直接使用,如果要考虑周全的话,可以用oledb来获取excel的表结构,并且加入ColumnMappings来设置对照字段,这样效果就完全可以做到和sqlserver的dts相同的效果了。

Natural Language Playlist
Natural Language Playlist

探索语言和音乐之间丰富而复杂的关系,并使用 Transformer 语言模型构建播放列表。

Natural Language Playlist 67
查看详情 Natural Language Playlist

本文资料整理来自:CSDN

相关标签:
WPS零基础入门到精通全套教程!
WPS零基础入门到精通全套教程!

全网最新最细最实用WPS零基础入门到精通全套教程!带你真正掌握WPS办公! 内含Excel基础操作、函数设计、数据透视表等

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号