zoukankan      html  css  js  c++  java
  • 将Excel数据批量插入数据库的常用方法

    一、结合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]);
                        }
  • 相关阅读:
    用R作Polar图等
    R语言绘制空间热力图
    Spark 基础及RDD基本操作
    Bars, rectangles with bases on x-axis
    spark dataframe操作集锦(提取前几行,合并,入库等)
    【R】用 ggplot2 绘制漂亮的分级统计地图
    Rattle:数据挖掘的界面化操作
    R语言进阶之4:数据整形(reshape)
    ggplot2——简介
    python复习冒泡排序
  • 原文地址:https://www.cnblogs.com/leeolevis/p/1911551.html
Copyright © 2011-2022 走看看