• 读取Excel的记录并导入SQL数据库


    准备一下,近段时间,需要把Excel的数据导入数据库中。

    引用命名空间:

    using System.Configuration;
    using System.Data;
    using System.Data.OleDb;
    using System.Data.SqlClient;

    你可以写一个方法,是去读取Excel文档的方法,返回DataSet数据集:

    private DataSet ImportExcelToDataSet(string virtualPath, string sqlQueryStatement)
        {
            string excelConnectionString = DB.ExcelConnectionString(Server.MapPath(virtualPath));
            OleDbConnection dc = new OleDbConnection(excelConnectionString);
            OleDbDataAdapter da = new OleDbDataAdapter(sqlQueryStatement, dc);
            DataSet ds = new DataSet();
            da.Fill(ds);
            return ds;
        }
    Source Code


    导入数据库,在数据库中,需要创建一个表来存储Excel导入来的数据:



    接下来,你可以使作SqlBulkCopy的方法进行复制数据库:

    try
            {
                string cs = ConfigurationManager.ConnectionStrings["InsusSqlConnectionString"].ConnectionString;
                using (SqlConnection sqlConn = new SqlConnection(cs))
                {
                    string sqlQueryStatement = "SELECT [Material],[Plnt],[Level],[Item],[Component],[Object description] FROM [Sheet1$]";
                    string virtualPath = "~/App_Data/Book1.xlsx";
    
                    DataSet ds = ImportExcelToDataSet(virtualPath, sqlQueryStatement);
    
                    DataTable dt = ds.Tables[0];
    
                    sqlConn.Open();
                    using (SqlBulkCopy sqlbc = new SqlBulkCopy(sqlConn))
                    {
                        sqlbc.DestinationTableName = "BOM";
                        sqlbc.ColumnMappings.Add("Material", "Material");
                        sqlbc.ColumnMappings.Add("Plnt", "Plnt");
                        sqlbc.ColumnMappings.Add("Level", "Level");
                        sqlbc.ColumnMappings.Add("Item", "Item");
                        sqlbc.ColumnMappings.Add("Component", "Component");
                        sqlbc.ColumnMappings.Add("Object description", "Object description");
                        sqlbc.WriteToServer(dt);
                        Response.Write("数据导入成功!");
                    }
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
    Source Code


    演示:

    下面内容于2017-10-17 14:38分添加:

    使用sqlDataReader来导入,没有做过多的测试,速度与DataSet快不了多少:


    private OleDbDataReader ImportExcelToDataReader(string virtualPath, string sqlQueryStatement)
        {
            string excelConnectionString = DB.ExcelConnectionString(Server.MapPath(virtualPath));
            OleDbConnection oleConn = new OleDbConnection(excelConnectionString);
            OleDbCommand oleComm = new OleDbCommand(sqlQueryStatement, oleConn);
    
            oleConn.Open();
            return oleComm.ExecuteReader();
        }
    Source Code


    SqlBulkCopy的方法:


     string sqlQueryStatement = "SELECT [Material],[Plnt],[Level],[Item],[Component],[Object description] FROM [Sheet1$]";
            string virtualPath = "~/App_Data/Book1.xlsx";
    
            string cs = ConfigurationManager.ConnectionStrings["InsusSqlConnectionString"].ConnectionString;
            SqlConnection sqlConn = new SqlConnection(cs);
    
            OleDbDataReader reader = ImportExcelToDataReader(virtualPath, sqlQueryStatement);
    
            using (SqlBulkCopy bulkCopy = new SqlBulkCopy(sqlConn))
            {
                bulkCopy.DestinationTableName = "BOM";
                try
                {
                    sqlConn.Open();
                    bulkCopy.WriteToServer(reader);
                    Response.Write("数据导入成功。");
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.Message);
                }
                finally
                {
                    reader.Close();
                    sqlConn.Close();
                }
            }
    Source Code
  • 相关阅读:
    centos安装Libzip
    PHP安装
    DWZ主从表界面唯一性验证(自写js)(一)
    JSTL的if...else项目小试
    分享:忙了一辈子,才知道什么是你的
    JSTL时间格式化项目小试
    eclipse中去掉validate的方法
    Java初学者必学的JSTL
    (转)Java程序员应该知道的10个调试技巧
    为什么那些美事没有实现---生活中小事有感
  • 原文地址:https://www.cnblogs.com/insus/p/7742064.html
Copyright © 2020-2023  润新知