using System.Data;
using System.Configuration;
using System.Data.OleDb;
/// <summary>
/// 通用數據庫類(Access專用)未測試
/// <author>ZhengFei</author>
/// <version>2.0版</version>
/// <realseDate>2007-5-10</realseDate>
/// </summary>
namespace AccessDataBase
{
public class AccDataBase
{
string _ConnStr = "";
/// <summary>
/// 不帶參數的構造函數(默認取web.config中的連接字符串)
/// </summary>
public AccDataBase()
{
_ConnStr = ConfigurationManager.ConnectionStrings["AccConn"].ToString();
}
/// <summary>
/// 構造函數(重載,帶連接字符串)
/// </summary>
/// <param name="connstr">數據庫連接字符串</param>
public AccDataBase(string connstr)
{
try
{
this._ConnStr = connstr;
}
catch (Exception ep)
{
throw ep;
}
}
/// <summary>
/// 數據庫鏈接字符串
/// </summary>
public string ConnStr
{
get
{
return _ConnStr;
}
set
{
_ConnStr = value;
}
}
/// <summary>
/// 獲得一個已連接數據庫的OleDbConnection對象
/// </summary>
/// <returns>返回一個已連接數據庫的OleDbConnection對象</returns>
public OleDbConnection GetConn()
{
OleDbConnection Conn = new OleDbConnection(_ConnStr);
try
{
Conn.Open();
}
catch
{
throw;
}
return Conn;
}
/// <summary>
/// 釋放資源,並回收垃圾
/// </summary>
/// <returns></returns>
public void Dispose(OleDbConnection Conn)
{
if (Conn != null)
{
Conn.Close();
Conn.Dispose();
}
GC.Collect();
}
/// <summary>
/// 生成Command對象
/// </summary>
/// <param name="SQL">SQL語句</param>
/// <param name="Conn">OledbConnection對象</param>
/// <returns></returns>
public OleDbCommand CreateCommand(string SQL, OleDbConnection Conn)
{
if (Conn.State != ConnectionState.Open)
{
try
{
Conn.Open();
}
catch
{
throw;
}
}
OleDbCommand Cmd = new OleDbCommand(SQL, Conn);
return Cmd;
}
/// <summary>
/// 返回adapter對象
/// </summary>
/// <param name="SQL">SQL語句</param>
/// <param name="Conn">SqlConnection連接對象</param>
/// <returns>返回adapter對象</returns>
public OleDbDataAdapter CreateDataAdapter(string SQL, OleDbConnection Conn)
{
if (Conn.State != ConnectionState.Open)
{
try
{
Conn.Open();
}
catch
{
throw;
}
}
OleDbDataAdapter Da = new OleDbDataAdapter(SQL, Conn);
return Da;
}
public OleDbDataAdapter CreateDataAdapter(OleDbCommand cmd)
{
OleDbDataAdapter Da = new OleDbDataAdapter(cmd);
return Da;
}
/// <summary>
/// 驗證是否有數據
/// </summary>
/// <param name="SQL">SQL語句</param>
/// <returns></returns>
public bool ExistDate(string SQL)
{
OleDbConnection Conn = this.GetConn();
OleDbDataReader dr;
dr = this.CreateCommand(SQL, Conn).ExecuteReader();
if (dr.Read())
{
Dispose(Conn);
return true;
}
else
{
Dispose(Conn);
return false;
}
}
/// <summary>
/// 返回一個帶參數的OledbCommand對象
/// </summary>
/// <param name="SQL">SQL語句</param>
/// <param name="Conn">OLEDBConnection對象</param>
/// <param name="sp">OleDbParameter數組</param>
/// <returns></returns>
public OleDbCommand CreateCommand(string SQL, OleDbConnection Conn, OleDbParameter[] sp)
{
try
{
if (Conn.State != ConnectionState.Open)
{
Conn.Open();
}
}
catch
{
throw;
}
OleDbCommand Cmd = new OleDbCommand(SQL, Conn);
if (sp != null)
{
Cmd.Parameters.Clear();
foreach (OleDbParameter s in sp)
Cmd.Parameters.Add(s);
}
return Cmd;
}
/// <summary>
/// 執行無參數的OLEDBCommand對象(無返回)
/// </summary>
/// <param name="SQL">SQL語句</param>
public void Execute(string SQL)
{
OleDbConnection conn = new OleDbConnection(ConnStr);
conn.Open();
try
{
CreateCommand(SQL, conn).ExecuteNonQuery();
}
catch
{
throw;
}
finally
{
Dispose(conn);
}
return;
}
/// <summary>
/// 執行有參數的OLEDBCommand對象(無返回)
/// </summary>
/// <param name="SQL">SQL語句</param>
/// <param name="SP">OleDbParameter參數數組</param>
public void Execute(string SQL, OleDbParameter[] SP)
{
OleDbConnection conn = new OleDbConnection(ConnStr);
conn.Open();
try
{
CreateCommand(SQL, conn, SP).ExecuteNonQuery();
}
catch
{
throw;
}
finally
{
Dispose(conn);
}
return;
}
/// <summary>
/// 執行SQL語句返回OledbDataReader(記得關閉)
/// </summary>
/// <param name="SQL"></param>
/// <returns></returns>
public OleDbDataReader ExecuteReader(string SQL)
{
OleDbDataReader dr;
OleDbConnection conn = new OleDbConnection(ConnStr);
conn.Open();
try
{
dr = CreateCommand(SQL, conn).ExecuteReader();
}
catch
{
throw;
}
return dr;
}
/// <summary>
/// 執行SQL語句返回OledbDataReader(記得關閉)
/// </summary>
/// <param name="SQL">SQL語句</param>
/// <param name="SP">OleDbParameter數組</param>
/// <returns></returns>
public OleDbDataReader ExecuteReader(string SQL, OleDbParameter[] SP)
{
OleDbDataReader dr;
OleDbConnection conn = new OleDbConnection(ConnStr);
conn.Open();
try
{
dr = CreateCommand(SQL, conn, SP).ExecuteReader();
}
catch
{
throw;
}
return dr;
}
/// <summary>
/// 執行SQL語句返回DataSet
/// </summary>
/// <param name="SQL"></param>
/// <returns></returns>
public DataSet ExecuteDataSet(string SQL, string TableName)
{
DataSet ds = new DataSet();
OleDbConnection conn = new OleDbConnection(ConnStr);
conn.Open();
try
{
CreateDataAdapter(SQL, conn).Fill(ds, TableName);
}
catch
{
throw;
}
finally
{
Dispose(conn);
}
return ds;
}
/// <summary>
/// 執行SQL語句返回DataSet
/// </summary>
/// <param name="SQL">SQL語句</param>
/// <param name="TableName">表名</param>
/// <param name="sp">參數數組</param>
/// <returns></returns>
public DataSet ExecuteDataSet(string SQL, string TableName, OleDbParameter[] sp)
{
DataSet ds = new DataSet();
OleDbConnection conn = new OleDbConnection(ConnStr);
conn.Open();
try
{
CreateDataAdapter(CreateCommand(SQL, conn, sp)).Fill(ds, TableName);
}
catch
{
throw;
}
finally
{
Dispose(conn);
}
return ds;
}
/// <summary>
/// 創建輸入參數
/// </summary>
/// <param name="ParameterName">參數名稱</param>
/// <param name="DbType">參數類型</param>
/// <param name="Size">參數大小</param>
/// <param name="Value">參數值</param>
/// <returns>新的參數</returns>
public OleDbParameter MakeInputParameter(string ParameterName, OleDbType DbType, int Size, object Value)
{
return MakeParameter(ParameterName, DbType, Size, ParameterDirection.Input, Value);
}
/// <summary>
/// 創建輸出參數
/// </summary>
/// <param name="ParameterName">參數名稱</param>
/// <param name="DbType">參數類型</param>
/// <param name="Size">參數大小</param>
/// <returns>新的參數</returns>
public OleDbParameter MakeOutParameter(string ParameterName, OleDbType DbType, int Size)
{
return MakeParameter(ParameterName, DbType, Size, ParameterDirection.Output, null);
}
/// <summary>
/// 創建儲存過程參數
/// </summary>
/// <param name="ParameterName">參數名稱</param>
/// <param name="DbType">參數類型</param>
/// <param name="Size">參數大小</param>
/// <param name="Direction">參數方法</param>
/// <param name="Value">參數值</param>
/// <returns>新的參數</returns>
public OleDbParameter MakeParameter(string ParameterName, OleDbType DbType, Int32 Size, ParameterDirection Direction, object Value)
{
OleDbParameter AccParam;
if (Size > 0)
{
AccParam = new OleDbParameter(ParameterName, DbType, Size);
}
else
{
AccParam = new OleDbParameter(ParameterName, DbType);
}
AccParam.Direction = Direction;
if (!(Direction == ParameterDirection.Output && Value == null))
{
AccParam.Value = Value;
}
return AccParam;
}
/// <summary>
/// 查詢指定數量數據,返回DataSet(用於分頁)
/// </summary>
/// <param name="TableName">表名</param>
/// <param name="PK">主鍵</param>
/// <param name="Fields">要查詢的字段</param>
/// <param name="Sort">排序字段</param>
/// <param name="Filter">查詢條件</param>
/// <param name="PageSize">每頁大小</param>
/// <param name="CurrentPage">當前頁碼</param>
/// <returns></returns>
public DataSet GetDataSet(string TableName, string PK, string Fields, string Sort, string Filter, int PageSize, int CurrentPage)
{
DataSet ds = new DataSet();
OleDbConnection conn=new OleDbConnection(ConnStr);
conn.Open();
string sql = "", and = "";
int num = 0;
if (Fields == "") Fields = "*";
if (Sort == "")
{
Sort = string.Format("order by {0} asc", PK);
}
else
{
Sort = string.Format("order by {0}", Sort);
}
if (PageSize <= 0) PageSize = 10;
if (CurrentPage < 1) CurrentPage = 1;
num = (CurrentPage - 1) * PageSize;
if (Filter != "")
{
Filter = "where (" + Filter + ")";
and = "and";
}
else
{
and = "where";
}
if (CurrentPage == 1)
{
sql = string.Format("select top {0} {1} from {2} {3} {4}", PageSize, Fields, TableName, Filter, Sort);
}
else
{
sql = string.Format("select top {0} {1} from {2} {3} {4} ({5} not in(select top {6} {7} from {8} {9} {10})) {11}", PageSize, Fields, TableName, Filter, and, PK, num, PK, TableName, Filter, Sort, Sort);
}
ds = ExecuteDataSet(sql, TableName);
return ds;
}
/// <summary>
/// 查詢指定數量數據,返回OleDbDataReader(用於分頁)
/// </summary>
/// <param name="TableName">表名</param>
/// <param name="PK">主鍵</param>
/// <param name="Fields">要查詢的字段</param>
/// <param name="Sort">排序字段</param>
/// <param name="Filter">查詢條件</param>
/// <param name="PageSize">每頁大小</param>
/// <param name="CurrentPage">當前頁碼</param>
/// <returns></returns>
public OleDbDataReader GetDataReader(string TableName, string PK, string Fields, string Sort, string Filter, int PageSize, int CurrentPage)
{
OleDbDataReader dr;
OleDbConnection conn = new OleDbConnection(ConnStr);
conn.Open();
string sql = "", and = "";
int num = 0;
if (Fields == "") Fields = "*";
if (Sort == "")
{
Sort = string.Format("order by {0} asc", PK);
}
else
{
Sort = string.Format("order by {0}", Sort);
}
if (PageSize <= 0) PageSize = 10;
if (CurrentPage < 1) CurrentPage = 1;
num = (CurrentPage - 1) * PageSize;
if (Filter != "")
{
Filter = "where (" + Filter + ")";
and = "and";
}
else
{
and = "where";
}
if (CurrentPage == 1)
{
sql = string.Format("select top {0} {1} from {2} {3} {4}", PageSize, Fields, TableName, Filter, Sort);
}
else
{
sql = string.Format("select top {0} {1} from {2} {3} {4} ({5} not in(select top {6} {7} from {8} {9} {10})) {11}", PageSize, Fields, TableName, Filter, and, PK, num, PK, TableName, Filter, Sort, Sort);
}
dr = ExecuteReader(sql);
return dr;
}
}
}