using System; using System.Collections.Generic; using System.Text; using System.Data; using System.Data.Common; using System.Data.OleDb; using System.Xml; using System.Data.SqlClient; using Microsoft.ApplicationBlocks.OleDb; using System.Configuration; namespace Ant.Data { public sealed class OleDbDataAccess : BaseDataAccess { #region DataAccess 成员 private OleDbConnection OleDbConnection; private OleDbTransaction trans; public static string connstring = string.Empty; private DataAccess da; /// /// 构造函数 /// /// public OleDbDataAccess(string connString) { this.OleDbConnection = new OleDbConnection(connString); connstring = connString; } /// /// 构造函数 /// public OleDbDataAccess() { this.OleDbConnection = new OleDbConnection(); } #region int ExecuteNonQuery /// /// 执行SQL命令 /// /// SQL文本 /// 命令类型 /// 命令执行时所需要的参数 /// 受影响的行数 public override int ExecuteNonQuery(string commandText, System.Data.CommandType commandType, QueryParameterCollection Parameters) { try { this.Open(); OleDbCommand cmd = this.OleDbConnection.CreateCommand(); cmd.CommandText = commandText; cmd.CommandType = commandType; if (trans != null) { cmd.Transaction = trans; } foreach (QueryParameter p in Parameters) { if ((p.Direction == ParameterDirection.InputOutput || p.Direction == ParameterDirection.Input) && (p.Value == null)) { p.Value = DBNull.Value; } cmd.Parameters.Add(this.ToOleDbParameter(p)); } int tmpValue = cmd.ExecuteNonQuery(); //foreach (OleDbParameter p in cmd.Parameters) //{ // Parameters[p.ParameterName] = ToQueryParameter(p); //} return tmpValue; } catch (Exception ex) { return -1; } finally { this.Close(); } #region 另一种执行方法 //int Count = 0; //using (OleDbConnection conn = new OleDbConnection(connstring)) //{ // conn.Open(); // Count = OleDbHelper.ExecuteNonQuery(OleDbConnection, CommandType.Text, commandText); // return Count; //} #endregion } #endregion #region DataReader /// /// /// /// /// /// /// public override DbDataReader ExecuteDataReader(string commandText, CommandType commandType, QueryParameterCollection Parameters) { try { if (IsClosed) { Open(); } OleDbCommand cmd = this.OleDbConnection.CreateCommand(); cmd.CommandText = commandText; cmd.CommandType = commandType; if (trans != null) { cmd.Transaction = trans; } if (Parameters != null) { foreach (QueryParameter p in Parameters) { cmd.Parameters.Add(ToOleDbParameter(p)); } } OleDbDataReader reader = cmd.ExecuteReader(); //foreach (OleDbParameter p in cmd.Parameters) //{ // Parameters[p.ParameterName] = ToQueryParameter(p); //} return reader; } catch (Exception ex) { return null; } //finally //{ // Close(); //} } #endregion #region ExecuteDataTable public override System.Data.DataTable ExecuteDataTable(string commandText, System.Data.CommandType commandType, QueryParameterCollection Parameters, string tableName, int startRecord, int maxRecords) { try { this.Open(); OleDbDataAdapter da = new OleDbDataAdapter(); OleDbCommand cmd = new OleDbCommand(); cmd.Connection = this.OleDbConnection; cmd.CommandText = commandText; if (trans != null) { cmd.Transaction = trans; } if (Parameters != null) { foreach (QueryParameter p in Parameters) { cmd.Parameters.Add(this.ToOleDbParameter(p)); } } da.SelectCommand = cmd; DataTable dt = new DataTable(); da.Fill(startRecord, maxRecords, dt); //foreach (OleDbParameter p in da.SelectCommand.Parameters) //{ // Parameters[p.ParameterName] = ToQueryParameter(p); //} dt.TableName = tableName; return dt; } catch (Exception ex) { return null; } finally { Close(); } } #endregion #region ExecuteDataSet /// /// 返回DataSet数据集 /// /// /// /// /// /// /// /// public override DataSet ExecuteDataSet(string commandText, CommandType commandType, QueryParameterCollection Parameters, string tableName, int startRecord, int maxRecords) { try { DataSet ds = new DataSet(); OleDbDataAdapter sda = new OleDbDataAdapter(); OleDbCommand cmd = this.OleDbConnection.CreateCommand(); cmd.CommandText = commandText; cmd.CommandType = commandType; cmd.CommandTimeout = 60; if (trans != null) { cmd.Transaction = trans; } Open(); foreach (QueryParameter q in Parameters) { cmd.Parameters.Add(ToOleDbParameter(q)); } sda.SelectCommand = cmd; sda.Fill(ds, startRecord, maxRecords, tableName); //foreach (SqlParameter p in sda.SelectCommand.Parameters) //{ // Parameters[p.ParameterName] = ToQueryParameter(p); //} return ds; } finally { Close(); } } #endregion #region object ExecuteScalar /// /// /// /// /// /// /// public override object ExecuteScalar(string commandText, CommandType commandType, QueryParameterCollection parameters) { try { if (IsClosed) { Open(); } OleDbCommand cmd = this.OleDbConnection.CreateCommand(); cmd.CommandText = commandText; cmd.CommandType = commandType; if (trans != null) { cmd.Transaction = trans; } if (!object.Equals(parameters, null)) { foreach (QueryParameter p in parameters) { cmd.Parameters.Add(ToOleDbParameter(p)); } } object obj = cmd.ExecuteScalar(); //if (!object.Equals(parameters, null)) //{ // parameters.Clear(); // foreach (OleDbParameter p in cmd.Parameters) // { // parameters[p.ParameterName] = ToQueryParameter(p); // } //} return obj; } catch (Exception ex) { return null; } finally { Close(); } } #endregion #endregion #region DataAccess 成员 /// /// /// public override string ConnectionString { get { if (this.OleDbConnection.IsNull()) return ""; else return this.OleDbConnection.ConnectionString; } set { this.OleDbConnection.ConnectionString = value; } } public override DatabaseType DatabaseType { get { return DatabaseType.OleDb; } } public override DbTransaction Trans { get { if (this.trans != null) return trans; else return null; } } /// /// /// public override bool IsClosed { get { if (this.OleDbConnection.IsNull()) { return true; } if (this.OleDbConnection.State == ConnectionState.Closed) { return true; } else { return false; } } } /// /// 数据库连接是否不可用 /// public override bool IsUnEnable { get { if (this.OleDbConnection == null) { return true; } else { if (this.OleDbConnection.ConnectionString.IsEmpty()) { return true; } else { return false; } } } } /// /// 打开数据库连接 /// public override void Open() { //if (this.OleDbConnection.State == ConnectionState.Closed) if (OleDbConnection.ConnectionString == null || OleDbConnection.ConnectionString == "") { da = DataAccessFactory.GetWriteDataDefault; this.OleDbConnection = new OleDbConnection(da.ConnectionString); } if (this.OleDbConnection.State != ConnectionState.Open) { this.OleDbConnection.Open(); } } /// /// 关闭数据库连接之后释放资源 /// public override void Close() { if (this.OleDbConnection.State != ConnectionState.Closed) { this.OleDbConnection.Close(); this.OleDbConnection.Dispose(); } } /// /// 释放资源 /// public override void Dispose() { if (this.OleDbConnection != null) { this.OleDbConnection.Dispose(); } if (this.trans != null) { this.trans.Dispose(); } } /// /// 开始事务 /// public override void BeginTransaction() { Open(); if (trans == null) trans = this.OleDbConnection.BeginTransaction(); } /// /// 提交事务 /// public override void Commit() { try { if (null != this.trans) { this.trans.Commit(); this.trans.Dispose(); trans = null; } } finally { if (this.OleDbConnection.State != ConnectionState.Closed) { this.OleDbConnection.Close(); this.OleDbConnection.Dispose(); } } } /// /// 回滚事务 /// public override void RollBack() { try { if (trans != null) { this.trans.Rollback(); this.trans.Dispose(); trans = null; } } finally { //this.Close(); if (this.OleDbConnection.State != ConnectionState.Closed) { this.OleDbConnection.Close(); this.OleDbConnection.Dispose(); } } } #endregion #region private method /// /// 将QueryParameter转换成OleDbParameter /// /// 要转换的QueryParamter /// 返回OleDbParameter private OleDbParameter ToOleDbParameter(QueryParameter parameter) { OleDbParameter oleDbParameter = new OleDbParameter(); oleDbParameter.ParameterName = parameter.ParameterName; oleDbParameter.IsNullable = parameter.IsNullable; //oleDbParameter.DbType = parameter.DbType; oleDbParameter.Direction = parameter.Direction; oleDbParameter.Precision = parameter.Precision; oleDbParameter.Scale = parameter.Scale; oleDbParameter.Size = parameter.Size; oleDbParameter.SourceColumn = parameter.SourceColumn; oleDbParameter.SourceVersion = parameter.SourceVersion; oleDbParameter.Value = parameter.Value; return oleDbParameter; } private QueryParameter ToQueryParameter(OleDbParameter parameter) { QueryParameter queryParameter = new QueryParameter(); queryParameter.DbType = parameter.DbType; queryParameter.Direction = parameter.Direction; queryParameter.IsNullable = parameter.IsNullable; queryParameter.ParameterName = parameter.ParameterName; queryParameter.Precision = parameter.Precision; queryParameter.Scale = parameter.Scale; queryParameter.Size = parameter.Size; queryParameter.SourceColumn = parameter.SourceColumn; queryParameter.SourceVersion = parameter.SourceVersion; queryParameter.Value = parameter.Value; return queryParameter; } #endregion public override bool ValidateSQL(string sql) { throw new NotImplementedException(); } public override DataView ExecuteDataView(string commandText, CommandType commandType, QueryParameterCollection Parameters, string tableName, int startRecord, int maxRecords) { throw new NotImplementedException(); } public override DbDataReader ExecuteReader(string cmdText, DbParam[] parameters, CommandType cmdType) { throw new NotImplementedException(); } public override int ExecuteNonQuery(string commandText, DbParam[] parameters, CommandType commandType) { throw new NotImplementedException(); } public override object ExecuteScalar(string commandText, DbParam[] parameters, CommandType commandType) { throw new NotImplementedException(); } } }