| 自己编写的数据访问类(C#)--补充代码(2) |
| 作者/天才 时间/2006-1-10 17:35:00 类别/开发技术 查看/ |
| 标签:.Net联盟 |
作者:黄润成![]() 自己编写的数据访问类(C#)--补充代码(2) using System; using System.Data; using System.Data.SqlClient; using System.Collections; using it.com.cn.DbServices; namespace it.com.cn.DbServices.SqlDbServices { /// <summary> /// SqlDbServices 的摘要说明。 /// </summary> public class SqlDbService: IDbService { private string FConnString; private SqlConnection FConnection; private SqlCommand FCommand; private SqlDataAdapter FAdapter; private SqlCommandBuilder FCommandBuilder; private string FErrorMessage; private SqlTransaction FTransaction = null; private bool InTransaction = false; private long FTickCount = 0; public SqlDbService() { try { FConnString = System.Configuration.ConfigurationSettings.AppSettings["ConnectionString"]; FConnection = new SqlConnection(FConnString); FConnection.Open(); FAdapter = new SqlDataAdapter("", FConnection); FCommand = FAdapter.SelectCommand; FCommandBuilder = new SqlCommandBuilder(FAdapter); } catch (Exception e) { throw new Exception("创建 SqlDbService 对象出错!\n错误信息:\n" + e.Message); } } public SqlDbService(string connectionString) { try { FConnString = connectionString; FConnection = new SqlConnection(FConnString); FConnection.Open(); FAdapter = new SqlDataAdapter("", FConnection); FCommand = FAdapter.SelectCommand; FCommandBuilder = new SqlCommandBuilder(FAdapter); } catch (Exception e) { throw new Exception("创建 SqlDbService 对象出错!\n错误信息:\n" + e.Message); } } #region IDbService 成员 public string ConnectionString { get { return FConnString; } set { FConnString = value; try { FConnection.Close(); FConnection.ConnectionString = FConnString; FConnection.Open(); } catch (Exception e) { FErrorMessage = "设置数据库连接串时发生错误!\n错误信息:\n" + e.Message; throw new Exception(FErrorMessage); } } } public string ErrorMessage { get { return FErrorMessage; } } public ConnectionState State { get { return FConnection.State; } } public long TickCount { get { return FTickCount; } } public IDbDataParameter CreateParameter(string ParamName, DbType ParamType) { return (IDbDataParameter) new SqlParameter(ParamName, ParamType); } public IDbDataParameter CreateParameter(string ParamName, DbType ParamType, object ParamValue) { SqlParameter sqlParam = new SqlParameter(ParamName, ParamType); sqlParam.Value = ParamValue; return (IDbDataParameter) sqlParam; } public IDbDataParameter CreateParameter(string ParamName, DbType ParamType, object ParamValue, ParameterDirection ParamDirection) { SqlParameter sqlParam = (SqlParameter) CreateParameter(ParamName, ParamType, ParamValue); sqlParam.Direction = ParamDirection; return (IDbDataParameter) sqlParam; } public DbParams CreateDbParams(string[] ParamNames, DbType[] ParamTypes) { if ( ParamNames.Length != ParamTypes.Length ) { throw new Exception( "参数的数组长度不一致。" ); } DbParams dbParams = new DbParams(); for (int i = 0; i < ParamNames.Length; i++) { dbParams.AddParam(CreateParameter(ParamNames, ParamTypes)); } return dbParams; } public DbParams CreateDbParams(string[] ParamNames, System.Data.DbType[] ParamTypes, object[] ParamValues) { if ( ParamNames.Length != ParamTypes.Length || ParamNames.Length != ParamValues.Length ) { throw new Exception( "参数的数组长度不一致。" ); } DbParams dbParams = new DbParams(); for (int i = 0; i < ParamNames.Length; i++) { dbParams.AddParam(CreateParameter(ParamNames, ParamTypes, ParamValues)); } return dbParams; } public DbParams CreateDbParams( string[] ParamNames, DbType[] ParamTypes, object[] ParamValues, ParameterDirection[] ParamDirections ) { if ( ParamNames.Length != ParamTypes.Length || ParamNames.Length != ParamValues.Length || ParamNames.Length != ParamDirections.Length ) { throw new Exception( "参数的数组长度不一致。" ); } DbParams dbParams = new DbParams(); for (int i = 0; i < ParamNames.Length; i++) { dbParams.AddParam(CreateParameter(ParamNames, ParamTypes, ParamValues, ParamDirections)); } return dbParams; } public DbParams CreateDbParams(string ParamName, DbType ParamType) { DbParams dbParams = new DbParams(); dbParams.AddParam(CreateParameter(ParamName, ParamType)); return dbParams; } public DbParams CreateDbParams(string ParamName, DbType ParamType, object ParamValue) { DbParams dbParams = new DbParams(); dbParams.AddParam(CreateParameter(ParamName, ParamType, ParamValue)); return dbParams; } public DbParams CreateDbParams(string ParamName, DbType ParamType, object ParamValue, ParameterDirection ParamDirection) { DbParams dbParams = new DbParams(); dbParams.AddParam(CreateParameter(ParamName, ParamType, ParamValue, ParamDirection)); return dbParams; } public void ExecuteProcedure(string ProcedureName, DbParams Params) { try { FCommand.CommandText = ProcedureName; FCommand.CommandType = CommandType.StoredProcedure; if (Params != null) { foreach ( IDbDataParameter param in Params ) { FCommand.Parameters.Add( param ); } } FCommand.ExecuteNonQuery(); } catch ( Exception e ) { FErrorMessage = "执行存储过程时出错!\n错误信息:\n" + e.Message; throw new Exception(FErrorMessage); } finally { FCommand.Parameters.Clear(); } } public IDataReaderWrapper ExecuteProcedureReader(string ProcedureName, DbParams Params) { try { FCommand.CommandText = ProcedureName; FCommand.CommandType = CommandType.StoredProcedure; if (Params != null) { foreach ( IDbDataParameter param in Params ) { FCommand.Parameters.Add( param ); } } SqlDataReader reader = FCommand.ExecuteReader(); IDataReaderWrapper ReaderWrapper = new DataReaderWrapper(reader, this, reader.HasRows); return ReaderWrapper; } catch ( Exception e ) { FErrorMessage = "执行存储过程时出错!\n错误信息:\n" + e.Message; throw new Exception(FErrorMessage); } finally { FCommand.Parameters.Clear(); } } public DataSet ExecuteProcedureDataSet(string ProcedureName, DbParams Params) { try { FCommand.CommandText = ProcedureName; FCommand.CommandType = CommandType.StoredProcedure; if (Params != null) { foreach ( IDbDataParameter param in Params ) { FCommand.Parameters.Add( param ); } } DataSet ADataSet = new DataSet(); FAdapter.Fill( ADataSet ); return ADataSet; } catch ( Exception e ) { FErrorMessage = "执行存储过程时出错!\n错误信息:\n" + e.Message; throw new Exception(FErrorMessage); } finally { FCommand.Parameters.Clear(); } } public DataTable ExecuteProcedureTable(string ProcedureName, DbParams Params) { try { FCommand.CommandText = ProcedureName; FCommand.CommandType = CommandType.StoredProcedure; if (Params != null) { foreach ( IDbDataParameter param in Params ) { FCommand.Parameters.Add( param ); } } DataTable ADataTable = new DataTable(); FAdapter.Fill( ADataTable ); return ADataTable; } catch ( Exception e ) { FErrorMessage = "执行存储过程时出错!\n错误信息:\n" + e.Message; throw new Exception(FErrorMessage); } finally { FCommand.Parameters.Clear(); } } public DbParams ExecuteProcedureResults(string ProcedureName, DbParams Params) { try { FCommand.CommandText = ProcedureName; FCommand.CommandType = CommandType.StoredProcedure; DbParams Results = new DbParams(); for ( int i=0; i < Params.Count; i++ ) { FCommand.Parameters.Add( Params ); if (( Params.Direction == ParameterDirection.Output ) || ( Params.Direction == ParameterDirection.InputOutput )) { Results.AddParam(Params); } } FCommand.ExecuteNonQuery(); return Results; } catch ( Exception e ) { FErrorMessage = "执行存储过程时出错!\n错误信息:\n" + e.Message; throw new Exception(FErrorMessage); } finally { FCommand.Parameters.Clear(); } } public void ExecuteNone(string SqlString) { ExecuteNone(SqlString, new DbParams()); } public void ExecuteNone(string SqlString, DbParams Params) { try { FCommand.CommandText = SqlString; FCommand.CommandType = CommandType.Text; if (Params != null) { foreach ( IDbDataParameter param in Params ) { FCommand.Parameters.Add( param ); } } FCommand.ExecuteNonQuery(); } catch ( Exception e ) { FErrorMessage = "执行 SQL 语句时出错!\n错误信息:\n" + e.Message; throw new Exception(FErrorMessage); } finally { FCommand.Parameters.Clear(); } } public IDataReaderWrapper ExecuteReader(string SqlString) { return ExecuteReader(SqlString, new DbParams()); } public IDataReaderWrapper ExecuteReader(string SqlString, DbParams Params) { try { FCommand.CommandText = SqlString; FCommand.CommandType = CommandType.Text; if (Params != null) { foreach ( IDbDataParameter param in Params ) { FCommand.Parameters.Add( param ); } } SqlDataReader reader = FCommand.ExecuteReader(); IDataReaderWrapper ReaderWrapper = new DataReaderWrapper(reader, this, reader.HasRows); return ReaderWrapper; } catch ( Exception e ) { FErrorMessage = "执行查询时出错!\n错误信息:\n" + e.Message; throw new Exception(FErrorMessage); } finally { FCommand.Parameters.Clear(); } } public DataSet ExecuteDataSet(string SqlString) { return ExecuteDataSet(SqlString, new DbParams()); } public DataSet ExecuteDataSet(string SqlString, int StartRowNo, int MaxRowCount) { return ExecuteDataSet(SqlString, new DbParams(), StartRowNo, MaxRowCount); } public DataSet ExecuteDataSet(string SqlString, DbParams Params) { try { FCommand.CommandText = SqlString; FCommand.CommandType = CommandType.Text; if (Params != null) { foreach ( IDbDataParameter param in Params ) { FCommand.Parameters.Add( param ); } } DataSet ADataSet = new DataSet(); FAdapter.Fill( ADataSet ); return ADataSet; } catch ( Exception e ) { FErrorMessage = "执行查询时出错!\n错误信息:\n" + e.Message; throw new Exception(FErrorMessage); } finally { FCommand.Parameters.Clear(); } } public DataSet ExecuteDataSet(string SqlString, DbParams Params, int StartRowNo, int MaxRowCount) { try { FCommand.CommandText = SqlString; FCommand.CommandType = CommandType.Text; if (Params != null) { foreach ( IDbDataParameter param in Params ) { FCommand.Parameters.Add( param ); } } DataSet ADataSet = new DataSet(); FAdapter.Fill( ADataSet, StartRowNo, MaxRowCount, "MappedTable" ); return ADataSet; } catch ( Exception e ) { FErrorMessage = "执行查询时出错!\n错误信息:\n" + e.Message; throw new Exception(FErrorMessage); } finally { FCommand.Parameters.Clear(); } } public DataSet ExecuteDataSet(string SqlString, string TableName) { return ExecuteDataSet(SqlString, new DbParams(), TableName); } public DataSet ExecuteDataSet(string SqlString, int StartRowNo, int MaxRowCount, string TableName) { return ExecuteDataSet(SqlString, new DbParams(), StartRowNo, MaxRowCount, TableName); } public DataSet ExecuteDataSet(string SqlString, DbParams Params, string TableName) { try { FCommand.CommandText = SqlString; FCommand.CommandType = CommandType.Text; if (Params != null) { foreach ( IDbDataParameter param in Params ) { FCommand.Parameters.Add( param ); } } DataSet ADataSet = new DataSet(); FAdapter.Fill( ADataSet, TableName ); return ADataSet; } catch ( Exception e ) { FErrorMessage = "执行查询时出错!\n错误信息:\n" + e.Message; throw new Exception(FErrorMessage); } finally { FCommand.Parameters.Clear(); } } public DataSet ExecuteDataSet(string SqlString, DbParams Params, int StartRowNo, int MaxRowCount, string TableName) { try { FCommand.CommandText = SqlString; FCommand.CommandType = CommandType.Text; if (Params != null) { foreach ( IDbDataParameter param in Params ) { FCommand.Parameters.Add( param ); } } DataSet ADataSet = new DataSet(); FAdapter.Fill( ADataSet, StartRowNo, MaxRowCount, TableName ); return ADataSet; } catch ( Exception e ) { FErrorMessage = "执行查询时出错!\n错误信息:\n" + e.Message; throw new Exception(FErrorMessage); } finally { FCommand.Parameters.Clear(); } } public DataTable ExecuteDataTable(string SqlString) { return ExecuteDataTable(SqlString, new DbParams()); } public DataTable ExecuteDataTable(string SqlString, int StartRowNo, int MaxRowCount) { return ExecuteDataTable(SqlString, new DbParams(), StartRowNo, MaxRowCount); } public DataTable ExecuteDataTable(string SqlString, DbParams Params) { try { FCommand.CommandText = SqlString; FCommand.CommandType = CommandType.Text; if (Params != null) { foreach ( IDbDataParameter param in Params ) { FCommand.Parameters.Add( param ); } } DataTable ADataTable = new DataTable(); FAdapter.Fill( ADataTable ); return ADataTable; } catch ( Exception e ) { FErrorMessage = "执行查询时出错!\n错误信息:\n" + e.Message; throw new Exception(FErrorMessage); } finally { FCommand.Parameters.Clear(); } } public DataTable ExecuteDataTable(string SqlString, DbParams Params, int StartRowNo, int MaxRowCount) { try { FCommand.CommandText = SqlString; FCommand.CommandType = CommandType.Text; if (Params != null) { foreach ( IDbDataParameter param in Params ) { FCommand.Parameters.Add( param ); } } DataSet ADataSet = new DataSet(); FAdapter.Fill( ADataSet, StartRowNo, MaxRowCount, "MappedTable" ); return ADataSet.Tables["MappedTable"]; } catch ( Exception e ) { FErrorMessage = "执行查询时出错!\n错误信息:\n" + e.Message; throw new Exception(FErrorMessage); } finally { FCommand.Parameters.Clear(); } } public DataTable ExecuteDataTable(string SqlString, string TableName) { return ExecuteDataTable(SqlString, new DbParams(), TableName); } public DataTable ExecuteDataTable(string SqlString, int StartRowNo, int MaxRowCount, string TableName) { return ExecuteDataTable(SqlString, new DbParams(), StartRowNo, MaxRowCount, TableName); } public DataTable ExecuteDataTable(string SqlString, DbParams Params, string TableName) { try { FCommand.CommandText = SqlString; FCommand.CommandType = CommandType.Text; if (Params != null) { foreach ( IDbDataParameter param in Params ) { FCommand.Parameters.Add( param ); } } DataTable ADataTable = new DataTable( TableName ); FAdapter.Fill( ADataTable ); return ADataTable; } catch ( Exception e ) { FErrorMessage = "执行查询时出错!\n错误信息:\n" + e.Message; throw new Exception(FErrorMessage); } finally { FCommand.Parameters.Clear(); } } public DataTable ExecuteDataTable(string SqlString, DbParams Params, int StartRowNo, int MaxRowCount, string TableName) { try { FCommand.CommandText = SqlString; FCommand.CommandType = CommandType.Text; if (Params != null) { foreach ( IDbDataParameter param in Params ) { FCommand.Parameters.Add( param ); } } DataSet ADataSet = new DataSet(); FAdapter.Fill( ADataSet, StartRowNo, MaxRowCount, TableName ); return ADataSet.Tables[TableName]; } catch ( Exception e ) { FErrorMessage = "执行查询时出错!\n错误信息:\n" + e.Message; throw new Exception(FErrorMessage); } finally { FCommand.Parameters.Clear(); } } public object ExecuteScalar(string SqlString) { return ExecuteScalar(SqlString, new DbParams()); } public object ExecuteScalar(string SqlString, DbParams Params) { try { FCommand.CommandText = SqlString; FCommand.CommandType = CommandType.Text; if (Params != null) { foreach ( IDbDataParameter param in Params ) { FCommand.Parameters.Add( param ); } } return FCommand.ExecuteScalar(); } catch ( Exception e ) { FErrorMessage = "执行查询时出错!\n错误信息:\n" + e.Message; throw new Exception(FErrorMessage); } finally { FCommand.Parameters.Clear(); } } public int UpdateDataSet(DataSet ADataSet, string SqlString) { if (ADataSet == null) { FErrorMessage = "传入的 DataSet 对象为空!"; return -1; } try { FAdapter.SelectCommand.CommandText = SqlString; int result = FAdapter.Update(ADataSet); ADataSet.AcceptChanges(); return result; } catch ( Exception e ) { FErrorMessage = "提交 DataSet 数据时出错!\n错误信息:\n" + e.Message; throw new Exception(FErrorMessage); } } public int UpdateDataSet(DataSet ADataSet, string SqlString, string ATableName) { if (ADataSet == null) { FErrorMessage = "传入的 DataSet 对象为空!"; return -1; } if (ADataSet.Tables[ATableName] == null) { FErrorMessage = "指定的表不在 DataSet 对象中!"; return -1; } try { FAdapter.SelectCommand.CommandText = SqlString; int result = FAdapter.Update(ADataSet, ATableName); ADataSet.AcceptChanges(); return result; } catch ( Exception e ) { FErrorMessage = "提交 DataSet 数据时出错!\n错误信息:\n" + e.Message; throw new Exception(FErrorMessage); } } public int UpdateDataTable(DataTable ADataTable, string SqlString) { if (ADataTable == null) { FErrorMessage = "传入的 ADataTable 对象为空!"; return -1; } try { FAdapter.SelectCommand.CommandText = SqlString; int result = FAdapter.Update(ADataTable); ADataTable.AcceptChanges(); return result; } catch ( Exception e ) { FErrorMessage = "提交 DataTable 数据时出错!\n错误信息:\n" + e.Message; throw new Exception(FErrorMessage); } } public int UpdateDataRows(DataRow[] DataRows, string SqlString) { if (DataRows == null) { FErrorMessage = "传入的 DataRows 对象为空!"; return -1; } try { FAdapter.SelectCommand.CommandText = SqlString; return FAdapter.Update(DataRows); } catch ( Exception e ) { FErrorMessage = "提交 DataRows 数据时出错!\n错误信息:\n" + e.Message; throw new Exception(FErrorMessage); } } public void BeginTransaction() { try { if (!InTransaction) { FTransaction = FConnection.BeginTransaction(); if ( FTransaction != null ) { FCommand.Transaction = FTransaction; InTransaction = true; } } } catch ( Exception e ) { FErrorMessage = "启动事务时出错!\n错误信息:\n" + e.Message; throw new Exception(FErrorMessage); } } public void CommitTransaction() { try { if ( InTransaction ) { FTransaction.Commit(); InTransaction = false; } } catch ( Exception e ) { FErrorMessage = "提交事务时出错!\n错误信息:\n" + e.Message; throw new Exception(FErrorMessage); } } public void RollbackTransaction() { try { if ( InTransaction ) { FTransaction.Rollback(); InTransaction = false; } } catch ( Exception e ) { FErrorMessage = "回滚事务时出错!\n错误信息:\n" + e.Message; throw new Exception(FErrorMessage); } } public void Close() { if (FConnection.State == ConnectionState.Open) FConnection.Close(); FTickCount = 0; } public void Open() { if (FConnection.State == ConnectionState.Closed) FConnection.Open(); FTickCount = 0; } public bool IsExists(string SqlString) { return IsExists(SqlString, new DbParams()); } public bool IsExists(string SqlString, DbParams Params) { IDataReaderWrapper reader = ExecuteReader(SqlString, Params); bool isExists = reader.Read(); reader.Close(); return isExists; } #endregion /// <summary> /// 类提供的方法,适用于 MS 的数据库 /// </summary> /// <param name="SqlString">查询语句</param> /// <returns>返回 插入的记录的自增 ID 值</returns> public int InsertRecord(string SqlString) { return InsertRecord(SqlString, new DbParams()); } /// <summary> /// 类提供的方法,适用于 MS 的数据库 /// </summary> /// <param name="SqlString">查询语句</param> /// <param name="Params">查询参数</param> /// <returns>返回 插入的记录的自增 ID 值</returns> public int InsertRecord(string SqlString, DbParams Params) { SqlString = SqlString.Trim(); if (SqlString.LastIndexOf(";") == SqlString.Length) SqlString += " SELECT @@IDENTITY AS NEW_ID;"; else SqlString += "; SELECT @@IDENTITY AS NEW_ID;"; try { return Convert.ToInt32(ExecuteScalar(SqlString, Params).ToString()); } catch { return 0; } } } } |
| 查看该用户更多文章>> |
