/// 常用工具類——Excel操作類
/// <para> ------------------------------------------------</para>
/// <para> CreateConnection:根據Excel文件路徑和EXCEL驅動版本生成OleConnection對象實例</para>
/// <para> ExecuteDataSet:執行一條SQL語句,返回一個DataSet對象</para>
/// <para> ExecuteDataTable:執行一條SQL語句,返回一個DataTable對象</para>
/// <para> ExecuteDataAdapter:表示一組數據命令和一個數據庫連接,它們用於填充 DataSet 和更新數據源。</para>
/// <para> ExecuteNonQuery:執行數據庫語句返回受影響的行數,失敗或異常返回-1[通常為:INSERT、DELETE、UPDATE 和 SET 語句等命令]。</para>
/// <para> ExecuteScalar:執行數據庫語句返回第一行第一列,失敗或異常返回null</para>
/// <para> ExecuteDataReader:執行數據庫語句返回一個自進結果集流</para>
/// <para> GetWorkBookName:獲取Excel中的所有工作簿</para>
using System;
using System.Configuration;
using System.Web;
using System.Data;
using System.Data.OleDb;
using System.Data.SqlClient;
namespace Utils
{
/// <summary>
/// <para> </para>
/// 常用工具類——Excel操作類
/// <para> ------------------------------------------------</para>
/// <para> CreateConnection:根據Excel文件路徑和EXCEL驅動版本生成OleConnection對象實例</para>
/// <para> ExecuteDataSet:執行一條SQL語句,返回一個DataSet對象</para>
/// <para> ExecuteDataTable:執行一條SQL語句,返回一個DataTable對象</para>
/// <para> ExecuteDataAdapter:表示一組數據命令和一個數據庫連接,它們用於填充 DataSet 和更新數據源。</para>
/// <para> ExecuteNonQuery:執行數據庫語句返回受影響的行數,失敗或異常返回-1[通常為:INSERT、DELETE、UPDATE 和 SET 語句等命令]。</para>
/// <para> ExecuteScalar:執行數據庫語句返回第一行第一列,失敗或異常返回null</para>
/// <para> ExecuteDataReader:執行數據庫語句返回一個自進結果集流</para>
/// <para> GetWorkBookName:獲取Excel中的所有工作簿</para>
/// </summary>
public class ExcelHelper
{
private ExcelHelper() { }
#region EXCEL版本
/// <summary>
/// EXCEL版本
/// </summary>
public enum ExcelVerion
{
/// <summary>
/// Excel97-2003版本
/// </summary>
Excel2003,
/// <summary>
/// Excel2007版本
/// </summary>
Excel2007
}
#endregion
#region 根據EXCEL路徑生成OleDbConnectin對象
/// <summary>
/// 根據EXCEL路徑生成OleDbConnectin對象
/// </summary>
/// <param name="ExcelFilePath">EXCEL文件相對於站點根目錄的路徑</param>
/// <param name="Verion">Excel數據驅動版本:97-2003或2007,分別需要安裝數據驅動軟件</param>
/// <returns>OleDbConnection對象</returns>
public static OleDbConnection CreateConnection(string ExcelFilePath,ExcelVerion Verion)
{
OleDbConnection Connection = null;
string strConnection = string.Empty;
try
{
switch (Verion)
{
case ExcelVerion.Excel2003: //讀取Excel97-2003版本
strConnection = "Provider=Microsoft.Jet.OLEDB.4.0; " +
"Data Source=" + HttpContext.Current.Server.MapPath(ExcelFilePath) + ";Extended Properties=Excel 8.0";
break;
case ExcelVerion.Excel2007: //讀取Excel2007版本
strConnection = "Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties='Excel 12.0;HDR=YES';data source=" + ExcelFilePath;
break;
}
if(!string.IsNullOrEmpty(strConnection)) Connection = new OleDbConnection(strConnection);
}
catch (Exception)
{
}
return Connection;
}
#endregion
#region 創建一個OleDbCommand對象實例
/// <summary>
/// 創建一個OleDbCommand對象實例
/// </summary>
/// <param name="CommandText">SQL命令</param>
/// <param name="Connection">數據庫連接對象實例OleDbConnection</param>
/// <param name="OleDbParameters">可選參數</param>
/// <returns></returns>
private static OleDbCommand CreateCommand(string CommandText, OleDbConnection Connection, params System.Data.OleDb.OleDbParameter[] OleDbParameters)
{
if (Connection.State == ConnectionState.Closed)
Connection.Open();
OleDbCommand comm = new OleDbCommand(CommandText, Connection);
if (OleDbParameters != null)
{
foreach (OleDbParameter parm in OleDbParameters)
{
comm.Parameters.Add(parm);
}
}
return comm;
}
#endregion
#region 執行一條SQL語句,返回一個DataSet對象
/// <summary>
/// 執行一條SQL語句,返回一個DataSet對象
/// </summary>
/// <param name="Connection">OleDbConnection對象</param>
/// <param name="CommandText">SQL語句</param>
/// <param name="OleDbParameters">OleDbParameter可選參數</param>
/// <returns>DataSet對象</returns>
public static DataSet ExecuteDataSet(OleDbConnection Connection, string CommandText, params OleDbParameter[] OleDbParameters)
{
DataSet ds = new DataSet();
try
{
OleDbCommand comm = CreateCommand(CommandText, Connection, OleDbParameters);
OleDbDataAdapter da = new OleDbDataAdapter(comm);
da.Fill(ds);
}
catch (Exception)
{
}
finally
{
if (Connection.State == ConnectionState.Open) Connection.Close();
}
return ds;
}
#endregion
#region 執行一條SQL語句,返回一個DataTable對象
/// <summary>
/// 執行一條SQL語句,返回一個DataTable對象
/// </summary>
/// <param name="Connection">OleDbConnection對象</param>
/// <param name="CommandText">SQL語句</param>
/// <param name="OleDbParameters">OleDbParameter可選參數</param>
/// <returns>DataSet對象</returns>
public static DataTable ExecuteDataTable(OleDbConnection Connection, string CommandText, params OleDbParameter[] OleDbParameters)
{
DataTable Dt = null;
try
{
OleDbCommand comm = CreateCommand(CommandText, Connection, OleDbParameters);
OleDbDataAdapter da = new OleDbDataAdapter(comm);
DataSet Ds = new DataSet();
da.Fill(Ds);
Dt = Ds.Tables[0];
}
catch (Exception)
{
}
finally
{
if (Connection.State == ConnectionState.Open) Connection.Close();
}
return Dt;
}
#endregion
#region 表示一組數據命令和一個數據庫連接,它們用於填充 DataSet 和更新數據源。
/// <summary>
/// 表示一組數據命令和一個數據庫連接,它們用於填充 DataSet 和更新數據源。
/// </summary>
/// <param name="Connection">OleDbConnection對象</param>
/// <param name="CommandText">SQL語句</param>
/// <param name="OleDbParameters">OleDbParameter可選參數</param>
/// <returns></returns>
public static OleDbDataAdapter ExecuteDataAdapter(OleDbConnection Connection, string CommandText, params System.Data.OleDb.OleDbParameter[] OleDbParameters)
{
OleDbDataAdapter Da = null;
try
{
OleDbCommand comm = CreateCommand(CommandText, Connection, OleDbParameters);
Da = new OleDbDataAdapter(comm);
OleDbCommandBuilder cb = new OleDbCommandBuilder(Da);
}
catch (Exception)
{
}
finally
{
if (Connection.State == ConnectionState.Open) Connection.Close();
}
return Da;
}
#endregion
#region 執行數據庫語句返回受影響的行數,失敗或異常返回-1[通常為:INSERT、DELETE、UPDATE 和 SET 語句等命令]。
/// <summary>
/// 執行數據庫語句返回受影響的行數,失敗或異常返回-1[通常為:INSERT、DELETE、UPDATE 和 SET 語句等命令]。
/// </summary>
/// <param name="Connection">OleDbConnection對象</param>
/// <param name="CommandText">SQL語句</param>
/// <param name="OleDbParameters">OleDbParameter可選參數</param>
/// <returns>受影響的行數</returns>
public static int ExecuteNonQuery(OleDbConnection Connection, string CommandText, params System.Data.OleDb.OleDbParameter[] OleDbParameters)
{
int i = -1;
try
{
if (Connection.State == ConnectionState.Closed) Connection.Open();
OleDbCommand comm = CreateCommand(CommandText, Connection, OleDbParameters);
i = comm.ExecuteNonQuery();
}
catch (Exception)
{
}
finally
{
if (Connection.State == ConnectionState.Open) Connection.Close();
}
return i;
}
#endregion
#region 執行數據庫語句返回第一行第一列,失敗或異常返回null
/// <summary>
/// 執行數據庫語句返回第一行第一列,失敗或異常返回null
/// </summary>
/// <param name="Connection">OleDbConnection對象</param>
/// <param name="CommandText">SQL語句</param>
/// <param name="OleDbParameters">OleDbParameter可選參數</param>
/// <returns>第一行第一列的值</returns>
public static object ExecuteScalar(OleDbConnection Connection, string CommandText, params System.Data.OleDb.OleDbParameter[] OleDbParameters)
{
object Result = null;
try
{
OleDbCommand comm = CreateCommand(CommandText, Connection, OleDbParameters);
Result = comm.ExecuteScalar();
}
catch (Exception)
{
}
finally
{
if (Connection.State == ConnectionState.Open) Connection.Close();
}
return Result;
}
#endregion
#region 執行數據庫語句返回一個自進結果集流
/// <summary>
/// 執行數據庫語句返回一個自進結果集流
/// </summary>
/// <param name="Connection">OleDbConnection對象</param>
/// <param name="CommandText">SQL語句</param>
/// <param name="OleDbParameters">OleDbParameter可選參數</param>
/// <returns>DataReader對象</returns>
public static OleDbDataReader ExecuteDataReader(OleDbConnection Connection, string CommandText, params System.Data.OleDb.OleDbParameter[] OleDbParameters)
{
OleDbDataReader Odr = null;
try
{
OleDbCommand comm = CreateCommand(CommandText, Connection, OleDbParameters);
Odr = comm.ExecuteReader();
}
catch (Exception)
{
}
finally
{
if (Connection.State == ConnectionState.Open) Connection.Close();
}
return Odr;
}
#endregion
#region 獲取Excel中的所有工作簿
/// <summary>
/// 獲取Excel中的所有工作簿
/// </summary>
/// <param name="Connection">OleDbConnection對象</param>
/// <returns></returns>
public static DataTable GetWorkBookName(OleDbConnection Connection)
{
DataTable Dt = null;
try
{
if (Connection.State == ConnectionState.Closed) Connection.Open();
Dt = Connection.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
}
catch (Exception)
{
}
finally
{
if (Connection.State == ConnectionState.Open) Connection.Close();
}
return Dt;
}
#endregion
}
}