http://www.sufeinet.com/plugin.php?id=keke_group

苏飞论坛

 找回密码
 马上注册

QQ登录

只需一步,快速开始

分布式系统框架(V2.0) 轻松承载百亿数据,千万流量!讨论专区 - 源码下载 - 官方教程

HttpHelper爬虫框架(V2.7-含.netcore) HttpHelper官方出品,爬虫框架讨论区 - 源码下载 - 在线测试和代码生成

HttpHelper爬虫类(V2.0) 开源的爬虫类,支持多种模式和属性 源码 - 代码生成器 - 讨论区 - 教程- 例子

查看: 6310|回复: 0

[综合] 一个简单的Excel导入数据库的方法

[复制链接]
发表于 2019-5-23 08:15:41 | 显示全部楼层 |阅读模式
先来看看OleDbHelper
[C#] 纯文本查看 复制代码
    /// <summary>
    /// oledb类型数据库操作类
    /// </summary>
    public sealed class OleDbHelper
    {
        /// <summary>  
        /// 执行查询语句,返回OleDbDataReader  
        /// </summary>  
        /// <param name="strSQL">查询语句"select * from [" + sheetName + "]"</param>  
        /// <returns>OleDbDataReader</returns>  
        public static OleDbDataReader ExecuteReader(string strSQL, string connectionString)
        {
            OleDbConnection connection = new OleDbConnection(connectionString);
            OleDbCommand cmd = new OleDbCommand(strSQL, connection);
            try
            {
                connection.Open();
                OleDbDataReader myReader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
                return myReader;
            }
            catch (OleDbException e)
            {
                throw new Exception(e.Message);
            }
        }
    }


使用继承类
[C#] 纯文本查看 复制代码
    /// <summary>
    /// excel操作类
    /// </summary>
    public abstract class ExcelBLL<T>
    {
        /// <summary>
        /// 配置要链接数据库的字符串,必须在子类中使用override重写
        /// </summary>
        protected abstract string ConnName
        {
            get;
        }

        /// <summary>
        ///根据Sql语句查询
        /// </summary>
        /// <param name="sql">t-sql select * from [" + sheetName + "]</param>
        /// <returns>返回集合</returns>
        public List<T> FindList(string path, string sql)
        {
            using (var reader = OleDbHelper.ExecuteReader(sql, string.Format(ConnName, path)))
            {
                List<T> list = new List<T>();
                var fields = GetReaderFieldNames(reader);
                while (reader.Read())
                {
                    list.Add(FillModelFromReader(reader, fields));
                }
                return list;
            }
        }
        private static string[] GetReaderFieldNames(OleDbDataReader reader)
        {
            var fields = new string[reader.FieldCount];
            for (var i = 0; i < reader.FieldCount; i++)
            {
                fields[i] = reader.GetName(i);
            }
            return fields;
        }
        public static bool HasFields(string field, params string[] fields)
        {
            if (fields == null || fields.Length == 0)
                return true;
            return fields.Contains(field);
        }
        protected abstract T FillModelFromReader(OleDbDataReader reader, params string[] fields);
    }

这样取到的就是一个完整的list<obj对象>

比如一个产品表导入方法如下

[C#] 纯文本查看 复制代码
  /// <summary>
    ///excel产品类
    /// </summary>
    public class Site_ProductExcelBLL : ExcelBLL<Site_Product>
    {
        /// <summary> 
        /// 数据库链接字符串
        /// </summary>
        protected override string ConnName
        {
            /// <summary>
            ///"Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties='Excel 8.0;IMEX=1';";  
            ///office2007之前 仅支持.xls  
            ///Provider=Microsoft.Ace.OleDb.12.0;Data Source={0};Extended Properties='Excel 12.0; HDR=Yes; IMEX=1'
            ///支持.xls和.xlsx,即包括office2010等版本的 HDR=Yes代表第一行是标题,不是数据;
            ///</summary>
            get { return "Provider=Microsoft.Ace.OleDb.12.0;Data Source={0};Extended Properties='Excel 12.0; HDR=Yes; IMEX=1'"; }
        }
        /// <summary>
        /// 组织对象
        /// </summary>
        /// <param name="reader">reader</param>
        /// <param name="fields">fields</param>
        /// <returns>object</returns>
        protected override Site_Product FillModelFromReader(OleDbDataReader reader, params string[] fields)
        {
            var info = new Site_Product();

            if (HasFields("productid", fields)) info.productid = (int)reader["productid"];
            if (HasFields("lanmuid", fields)) info.lanmuid = (int)reader["lanmuid"];
            if (HasFields("keywords", fields)) info.keywords = reader["关键字"].ToString();
            if (HasFields("description", fields)) info.description = reader["描述"].ToString();
            if (HasFields("title", fields)) info.title = reader["产品名"].ToString();
            if (HasFields("link", fields)) info.link = reader["link"].ToString();
            if (HasFields("imgurl", fields)) info.imgurl = reader["imgurl"].ToString();
            if (HasFields("text", fields)) info.text = reader["text"].ToString();
            if (HasFields("context", fields)) info.context = reader["内容"].ToString();
            if (HasFields("sort", fields)) info.sort = (int)reader["sort"];
            if (HasFields("addtime", fields)) info.addtime = (DateTime)reader["addtime"];
            if (HasFields("reads", fields)) info.reads = (int)reader["reads"];

            return info;
        }
    }





1. 开通SVIP会员,免费下载本站所有源码,不限次数据,不限时间
2. 加官方QQ群,加官方微信群获取更多资源和帮助
3. 找站长苏飞做网站、商城、CRM、小程序、App、爬虫相关、项目外包等点这里
您需要登录后才可以回帖 登录 | 马上注册

本版积分规则

QQ|手机版|小黑屋|手机版|联系我们|关于我们|广告合作|苏飞论坛 ( 豫ICP备18043678号-2)

GMT+8, 2024-4-20 02:57

© 2014-2021

快速回复 返回顶部 返回列表