zoukankan      html  css  js  c++  java
  • 一个简单的C# Excel oledb帮助类

    public class ExcelOledbHelper
        {
            private readonly string connectionStr;
            /// <summary>
            /// 
            /// </summary>
            /// <param name="pathOfExcel">path of Excel, extension must be ".xlsx" or ".xls".</param>
            /// <param name="mode">0->export mode,write /1->import mode,read /2->linked mode,full</param>
            /// <param name="hasHeader">"true" means first row is head.</param>
            public ExcelOledbHelper(string pathOfExcel,int mode,bool hasHeader)
            {
                if (System.IO.File.Exists(pathOfExcel))
                {
                    string hdr = hasHeader == true ? "Yes" : "No";
                    this.connectionStr = new FileInfo(pathOfExcel).Extension switch
                    {
                        ".xlsx" => $"Provider=Microsoft.ACE.OLEDB.12.0;Data Source='{pathOfExcel}';Extended Properties='Excel 12.0;HDR={hdr};IMEX={mode};'",
                        ".xls"=> $"Provider=Microsoft.Jet.OLEDB.4.0;Data Source='{pathOfExcel}';Extended Properties='Excel 8.0;HDR={hdr};IMEX={mode};'",
                        _=> throw new ArgumentException("Excel文件扩展名错误,应是“.xlsx”或“.xls”。")
                    };
                }
                else
                    throw new ArgumentException($"Excel文件路径:{pathOfExcel} 不存在!");
            }
            /// <summary>
            /// 
            /// </summary>
            /// <param name="commandText">SQL clause</param>
            /// <param name="tableName">data table's name</param>
            /// <returns></returns>
            public DataTable ExecuteDataTable(string commandText,string tableName)
            {
                using OleDbConnection connection = new OleDbConnection(this.connectionStr);
                using OleDbCommand command = connection.CreateCommand();
                command.CommandText = commandText;
                using OleDbDataAdapter dataAdapter = new OleDbDataAdapter(command);
                DataTable dataTable = new DataTable(tableName);
                dataAdapter.Fill(dataTable);
                return dataTable;
            }
            /// <summary>
            /// 
            /// </summary>
            /// <param name="commandTextList"> list of SQL clauses</param>
            /// <param name="tableNameList"> names list of data tables,each name correspond to a sql clause executed result.</param>
            /// <returns></returns>
            public DataSet ExecuteDataSet(List<string> commandTextList,List<string> tableNameList )
            {
                if (commandTextList.Count != tableNameList.Count)
                    throw new ArgumentException("传入的SQL查询字符串列表与结果表名字符串列表数量不一致!");
                DataSet dataSet = new DataSet();
                for (int i = 0; i < commandTextList.Count; i++)
                {
                    DataTable dataTable = ExecuteDataTable(commandTextList[i], tableNameList[i]);
                    dataSet.Tables.Add(dataTable);
                }
                return dataSet;
            }
            /// <summary>
            /// get all contents of given tables.
            /// </summary>
            /// <param name="tableNameList">names list of data tables(sheets in Excel)</param>
            /// <returns></returns>
            public DataSet ExecuteDataSet(List<string> tableNameList)
            {
                DataSet dataSet = new DataSet();
                foreach (var name in tableNameList)
                {
                    DataTable dataTable = ExecuteDataTable($"SELECT * FROM [{name}$]", name);
                    dataSet.Tables.Add(dataTable);
                }
                return dataSet;
            }
            /// <summary>
            /// 
            /// </summary>
            /// <param name="commandTexts"> sql clauses.</param>
            public void ExecuteNoneQuery(List<string> commandTexts)
            {
                using OleDbConnection connection = new OleDbConnection(this.connectionStr);
                connection.Open();
                using OleDbCommand command = connection.CreateCommand();
                using OleDbTransaction transaction = connection.BeginTransaction();
                command.Transaction = transaction;
                try
                {
                    foreach (var item in commandTexts)
                    {
                        command.CommandText = item;
                        command.ExecuteNonQuery();
                    }
                    transaction.Commit();
                }
                catch (OleDbException exp)
                {
                    transaction.Rollback();
                    throw new Exception("SQL语句执行错误。
    "+ exp.Message+"
    "+exp.StackTrace);
                }
                finally
                {
                    transaction.Dispose();
                    command.Dispose();
                    connection.Close();
                }
            }
        }
    }
    
  • 相关阅读:
    POJ 2756 Autumn is a Genius 大数加减法
    RoboGuice注入框架简单应用
    Android 从相冊获取近期拍摄的多张照片(获取相机拍照所存储的照片)
    不可不知的DIP、IoC、DI以及IoC容器
    Codeforces Round #156 (Div. 2)---A. Greg&#39;s Workout
    zend framework将zip格式的压缩文件导入并解压到指定文件
    TreeSet排序
    Bee Framework_百度百科
    duck
    anglehack参赛总结
  • 原文地址:https://www.cnblogs.com/yzhyingcool/p/12953127.html
Copyright © 2011-2022 走看看