<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當前位置: 首頁 - 科技 - 知識百科 - 正文

        黃聰:c#中高效的excel導入sqlserver的方法

        來源:懂視網 責編:小采 時間:2020-11-09 08:00:43
        文檔

        黃聰:c#中高效的excel導入sqlserver的方法

        黃聰:c#中高效的excel導入sqlserver的方法:將oledb讀取的excel數據快速插入的sqlserver中,很多人通過循環來拼接sql,這樣做不但容易出錯而且效率低下,最好的辦法是使用bcp,也就是System.Data.SqlClient.SqlBulkCopy 類來實現。不但速度快,而且代碼簡單,下面測試代碼導入一個6萬多條數據的she
        推薦度:
        導讀黃聰:c#中高效的excel導入sqlserver的方法:將oledb讀取的excel數據快速插入的sqlserver中,很多人通過循環來拼接sql,這樣做不但容易出錯而且效率低下,最好的辦法是使用bcp,也就是System.Data.SqlClient.SqlBulkCopy 類來實現。不但速度快,而且代碼簡單,下面測試代碼導入一個6萬多條數據的she

        將oledb讀取的excel數據快速插入的sqlserver中,很多人通過循環來拼接sql,這樣做不但容易出錯而且效率低下,最好的辦法是使用bcp,也就是System.Data.SqlClient.SqlBulkCopy 類來實現。不但速度快,而且代碼簡單,下面測試代碼導入一個6萬多條數據的sheet,

        將oledb讀取的excel數據快速插入的sqlserver中,很多人通過循環來拼接sql,這樣做不但容易出錯而且效率低下,最好的辦法是使用bcp,也就是System.Data.SqlClient.SqlBulkCopy 類來實現。不但速度快,而且代碼簡單,下面測試代碼導入一個6萬多條數據的sheet,包括讀取(全部讀取比較慢)在我的開發環境中只需要10秒左右,而真正的導入過程只需要4.5秒。


        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();
        }


        }
        }

        上面的TransferData基本可以直接使用,如果要考慮周全的話,可以用oledb來獲取excel的表結構,并且加入ColumnMappings來設置對照字段,這樣效果就完全可以做到和sqlserver的dts相同的效果了。

        獲取excel結構的方法可以參考我先前的文章

        http://blog.csdn.net/jinjazz/archive/2008/05/13/2441635.aspx

        聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        黃聰:c#中高效的excel導入sqlserver的方法

        黃聰:c#中高效的excel導入sqlserver的方法:將oledb讀取的excel數據快速插入的sqlserver中,很多人通過循環來拼接sql,這樣做不但容易出錯而且效率低下,最好的辦法是使用bcp,也就是System.Data.SqlClient.SqlBulkCopy 類來實現。不但速度快,而且代碼簡單,下面測試代碼導入一個6萬多條數據的she
        推薦度:
        標簽: 方法 excel 導入
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 在线不卡免费视频| 久久午夜无码免费| 亚洲av成人中文无码专区| 亚洲AV成人一区二区三区观看| 无码国产精品一区二区免费| 欧洲精品成人免费视频在线观看| 成人亚洲网站www在线观看| 精品亚洲永久免费精品| 亚洲综合色一区二区三区小说| 亚洲人成色99999在线观看| 永久免费精品影视网站| 99爱在线观看免费完整版| 青草草在线视频永久免费| 日本亚洲视频在线 | 久久久久亚洲AV无码专区首| 亚洲免费在线视频播放| 美女巨胸喷奶水视频www免费| 免费国产污网站在线观看15 | 真人做人试看60分钟免费视频| 国产精品嫩草影院免费| 亚洲av不卡一区二区三区| 黄色成人免费网站| 亚洲av永久无码精品秋霞电影秋 | 免费人人潮人人爽一区二区| 成人黄色免费网站| 亚洲国产美女精品久久久| 一色屋成人免费精品网站| 亚洲成av人片在线天堂无| 亚洲情侣偷拍精品| 亚洲精品无码你懂的| 免费播放特黄特色毛片| 亚洲校园春色另类激情| 三年片在线观看免费观看大全动漫| 亚洲不卡无码av中文字幕| 亚洲gay片在线gv网站| 亚洲人成人77777网站| 一级做a免费视频观看网站| 一区国严二区亚洲三区| 久久国产乱子免费精品| 亚洲国产成人久久综合| 精品久久久久久亚洲|