AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
using System;
using System.Data; // 包括一些通用数据库对象(如:DataSet,DataTable)的命名空间namespace MYADO
{
/// <summary>
/// 抽象数据库操作类 的摘要说明。
/// 此处声明为抽象类,类中的所有方法也均为抽象方法以便子类覆盖
/// </summary>
public abstract class DBOperator
{
/// <summary>
/// 得到数据连接
/// </summary>
public abstract IDbConnection Connection
{
get;
} /// <summary>
/// 打开数据库连接
/// </summary>
public abstract void Open(); /// <summary>
/// 关闭数据库连接
/// </summary>
public abstract void Close(); /// <summary>
/// 开始一个事务
/// </summary>
public abstract void BeginTrans(); /// <summary>
/// 提交一个事务
/// </summary>
public abstract void CommitTrans(); /// <summary>
/// 回滚一个事务
/// </summary>
public abstract void RollbackTrans(); /// <summary>
/// 执行SQL语句,没有返回值
/// </summary>
/// <param name="sql">SQL语句</param>
public abstract void ExeSql(string sql); /// <summary>
/// 执行Insert SQL语句返回当前ID
/// </summary>
/// <param name="sql">SQL语句</param>
/// <param name="a">临时变量</param>
/// <returns>当前ID</returns>
public abstract int ExeSql(string sql, int a); /// <summary>
/// 执行SQL语句返回第一行第一列的值
/// </summary>
/// <param name="sql">SQL语句</param>
/// <returns>第一行第一列的值</returns>
public abstract string ExeSqlScalar(string sql); /// <summary>
/// 执行SQL语句返回影响行数
/// </summary>
/// <param name="sql">SQL语句</param>
/// <returns>影响行数</returns>
public abstract int ExeSqlRows(string sql); /// <summary>
/// 获取DataSet
/// </summary>
/// <param name="sql">SQL语句</param>
/// <returns>DataSet</returns>
public abstract DataSet GetDataSet(string sql); /// <summary>
/// 获取DataTable
/// </summary>
/// <param name="sql">SQL语句</param>
/// <returns>DataTable</returns>
public abstract DataTable GetDataTable(string sql); /// <summary>
/// 执行存储过程
/// </summary>
/// <param name="p_ProcedureName">存储过程名</param>
/// <param name="p_SqlParameterArray">存储过程参数</param>
public abstract void ExeProcedure(string p_ProcedureName, System.Data.SqlClient.SqlParameter [] p_SqlParameterArray); /// <summary>
/// 执行存储过程
/// </summary>
/// <param name="p_ProcedureName">存储过程名</param>
/// <param name="p_SqlParameterArray">存储过程参数</param>
/// <param name="p_TableIndex">表索引(多个表时)</param>
/// <returns></returns>
public abstract DataSet ExeProcedure(string p_ProcedureName, System.Data.SqlClient.SqlParameter [] p_SqlParameterArray, int p_TableIndex);
}
}
using System;
using System.Data; // 包括一些通用数据库对象(如:DataSet,DataTable)的命名空间namespace MYADO
{
/// <summary>
/// 抽象数据库操作类 的摘要说明。
/// 此处声明为抽象类,类中的所有方法也均为抽象方法以便子类覆盖
/// </summary>
public abstract class DBOperator
{
/// <summary>
/// 得到数据连接
/// </summary>
public abstract IDbConnection Connection
{
get;
} /// <summary>
/// 打开数据库连接
/// </summary>
public abstract void Open(); /// <summary>
/// 关闭数据库连接
/// </summary>
public abstract void Close(); /// <summary>
/// 开始一个事务
/// </summary>
public abstract void BeginTrans(); /// <summary>
/// 提交一个事务
/// </summary>
public abstract void CommitTrans(); /// <summary>
/// 回滚一个事务
/// </summary>
public abstract void RollbackTrans(); /// <summary>
/// 执行SQL语句,没有返回值
/// </summary>
/// <param name="sql">SQL语句</param>
public abstract void ExeSql(string sql); /// <summary>
/// 执行Insert SQL语句返回当前ID
/// </summary>
/// <param name="sql">SQL语句</param>
/// <param name="a">临时变量</param>
/// <returns>当前ID</returns>
public abstract int ExeSql(string sql, int a); /// <summary>
/// 执行SQL语句返回第一行第一列的值
/// </summary>
/// <param name="sql">SQL语句</param>
/// <returns>第一行第一列的值</returns>
public abstract string ExeSqlScalar(string sql); /// <summary>
/// 执行SQL语句返回影响行数
/// </summary>
/// <param name="sql">SQL语句</param>
/// <returns>影响行数</returns>
public abstract int ExeSqlRows(string sql); /// <summary>
/// 获取DataSet
/// </summary>
/// <param name="sql">SQL语句</param>
/// <returns>DataSet</returns>
public abstract DataSet GetDataSet(string sql); /// <summary>
/// 获取DataTable
/// </summary>
/// <param name="sql">SQL语句</param>
/// <returns>DataTable</returns>
public abstract DataTable GetDataTable(string sql); /// <summary>
/// 执行存储过程
/// </summary>
/// <param name="p_ProcedureName">存储过程名</param>
/// <param name="p_SqlParameterArray">存储过程参数</param>
public abstract void ExeProcedure(string p_ProcedureName, System.Data.SqlClient.SqlParameter [] p_SqlParameterArray); /// <summary>
/// 执行存储过程
/// </summary>
/// <param name="p_ProcedureName">存储过程名</param>
/// <param name="p_SqlParameterArray">存储过程参数</param>
/// <param name="p_TableIndex">表索引(多个表时)</param>
/// <returns></returns>
public abstract DataSet ExeProcedure(string p_ProcedureName, System.Data.SqlClient.SqlParameter [] p_SqlParameterArray, int p_TableIndex);
}
}
{
/// <summary>
/// 数据库类型
/// </summary>
public enum DBEnum
{
/// <summary>
/// OleDB 数据库
/// </summary>
OleDB,
/// <summary>
/// ODBC 数据库
/// </summary>
ODBC,
/// <summary>
/// Oracle 数据库
/// </summary>
Oracle,
/// <summary>
/// SQL Server 数据库
/// </summary>
SQLServer
}
}
{
/// <summary>
/// 调用数据库操作类的工厂类 的摘要说明。
/// </summary>
public class DBOperatorFactory
{
/// <summary>
/// 获取一个数据库操作对象
/// </summary>
/// <param name="strConnection">数据库连接字符串</param>
/// <returns>数据库操作对象</returns>
public static DBOperator GetDBOperator(string strConnection)
{
return new SqlDBOperator(strConnection);
} /// <summary>
/// 获取一个数据库操作对象
/// </summary>
/// <param name="strConnection">数据库连接字符串</param>
/// <param name="p_DBEnum">数据类型</param>
/// <returns>数据库操作对象</returns>
public static DBOperator GetDBOperator(string strConnection, DBEnum p_DBEnum)
{
DBOperator db = null; switch (p_DBEnum)
{
case DBEnum.OleDB :
{
//db = new OleDBOperator(strConnection);
break;
}
case DBEnum.ODBC :
{
//db = new ODBCDBOperator(strConnection);
break;
}
case DBEnum.Oracle :
{
break;
}
case DBEnum.SQLServer :
{
db = new SqlDBOperator(strConnection);
break;
}
default :
{
//db = new OleDBOperator(strConnection);
db = new SqlDBOperator(strConnection);
break;
}
} return db;
}
}
}
using System.Data;
using System.Data.SqlClient; // 封装SQL Sevrer 的访问方法的命名空间namespace MYADO
{
/// <summary>
/// 实现SQL Server数据库操作 的摘要说明。
/// </summary>
internal class SqlDBOperator : DBOperator
{
/// <summary>
/// 数据库连接
/// </summary>
private SqlConnection _conn;
/// <summary>
/// 事务处理类
/// </summary>
private SqlTransaction _trans;
/// <summary>
/// 获取当前是否处于事务处理中,默认值false
/// </summary>
private bool isTransaction = false;
public SqlDBOperator(string strConnection)
{
//
// TODO: 在此处添加构造函数逻辑
//
this._conn = new SqlConnection(strConnection);
} /// <summary>
/// 获取当前SQL Server连接
/// </summary>
public override IDbConnection Connection
{
get
{
return this._conn;
}
}
/// <summary>
/// 打开SQL Server连接
/// </summary>
public override void Open()
{
if (_conn.State != ConnectionState.Open)
{
try
{
_conn.Open();
}
catch
{
}
}
} /// <summary>
/// 关闭SQL Server连接
/// </summary>
public override void Close()
{
if (_conn.State == ConnectionState.Open)
{
try
{
_conn.Close();
}
catch
{
}
}
} /// <summary>
/// 开始一个SQL Server事务
/// </summary>
public override void BeginTrans()
{
_trans = _conn.BeginTransaction();
isTransaction = true;
} /// <summary>
/// 提交一个SQL Server事务
/// </summary>
public override void CommitTrans()
{
_trans.Commit();
isTransaction = false;
} /// <summary>
/// 回滚一个SQL Server事务
/// </summary>
public override void RollbackTrans()
{
_trans.Rollback();
isTransaction = false;
} /// <summary>
/// 执行一个SQL语句(UPDATE,INSERT)
/// </summary>
/// <param name="sql">SQL语句</param>
public override void ExeSql(string sql)
{
// 打开
this.Open(); SqlCommand cmd = new SqlCommand();
cmd.Connection = this._conn;
if (isTransaction == true)
{
cmd.Transaction = this._trans;
}
cmd.CommandText = sql;
try
{
cmd.ExecuteNonQuery();
}
catch
{
} // 释放
this.Close();
} /// <summary>
/// 执行一个SQL语句(INSERT)返回当前ID
/// </summary>
/// <param name="sql">SQL语句</param>
/// <param name="a">临时变量</param>
/// <returns>当前ID</returns>
public override int ExeSql(string sql, int a)
{
int identity = -1;
// 打开
this.Open(); SqlCommand cmd = new SqlCommand();
cmd.Connection = this._conn;
if (isTransaction == true)
{
cmd.Transaction = this._trans;
}
cmd.CommandText = sql + " select @@identity as 'identity'";
try
{
// 第一行第一列的值为当前ID
SqlDataReader dr = cmd.ExecuteReader();
if (dr.Read())
{
identity = int.Parse(dr[0].ToString());
} dr.Close();
}
catch
{
} // 释放
this.Close(); return identity;
} /// <summary>
/// 执行SQL语句返回第一行第一列的值
/// </summary>
/// <param name="sql">SQL语句</param>
/// <returns>第一行第一列的值</returns>
public override string ExeSqlScalar(string sql)
{
DataTable dt = null;
try
{
dt = this.GetDataTable( sql);
if (dt.Rows.Count > 0)
{
string v_Value = dt.Rows[0][0].ToString();
dt.Dispose();
return v_Value;
}
else
{
return "";
}
}
catch
{
return "";
}
}
/// <summary>
/// 执行SQL语句返回影响行数
/// </summary>
/// <param name="sql">SQL语句</param>
/// <returns>影响行数</returns>
public override int ExeSqlRows(string sql)
{
DataTable dt = null;
try
{
dt = this.GetDataTable( sql);
int v_RowsCount = dt.Rows.Count;
dt.Dispose();
return v_RowsCount;
}
catch
{
return -1;
}
} /// <summary>
/// 获取DataSet
/// </summary>
/// <param name="sql">SQL语句</param>
/// <returns>DataSet</returns>
public override DataSet GetDataSet(string sql)
{
// 打开
this.Open(); SqlCommand cmd = new SqlCommand();
cmd.Connection = this._conn;
if (isTransaction == true)
{
cmd.Transaction = this._trans;
}
DataSet ds = new DataSet();
SqlDataAdapter da = new SqlDataAdapter();
cmd.CommandText = sql;
da.SelectCommand = cmd;
try
{
da.Fill(ds);
}
catch
{
}
// 释放
this.Close();
return ds;
} /// <summary>
/// 获取DataTable
/// </summary>
/// <param name="sql">SQL语句</param>
/// <returns>DataTable</returns>
public override DataTable GetDataTable(string sql)
{
// 打开
this.Open(); SqlCommand cmd = new SqlCommand();
cmd.Connection = this._conn;
if (isTransaction == true)
{
cmd.Transaction = this._trans;
}
DataTable dt = new DataTable();
SqlDataAdapter da = new SqlDataAdapter();
cmd.CommandText = sql;
da.SelectCommand = cmd;
try
{
da.Fill(dt);
}
catch
{
} // 释放
this.Close(); return dt;
} /// <summary>
/// 执行存储过程
/// </summary>
/// <param name="p_ProcedureName">存储过程名</param>
/// <param name="p_SqlParameterArray">存储过程参数</param>
public override void ExeProcedure(string p_ProcedureName, SqlParameter[] p_SqlParameterArray)
{
// 打开
this.Open();
SqlCommand cmd = new SqlCommand();
cmd.CommandText = p_ProcedureName;
cmd.Connection = this._conn;
cmd.CommandType = CommandType.StoredProcedure;
foreach (SqlParameter Sq in p_SqlParameterArray)
{
cmd.Parameters.Add( Sq);
}
cmd.ExecuteNonQuery();
// 释放
this.Close();
} /// <summary>
/// 执行存储过程
/// </summary>
/// <param name="p_ProcedureName">存储过程名</param>
/// <param name="p_SqlParameterArray">存储过程参数</param>
/// <param name="p_TableIndex">表索引(多个表时)</param>
/// <returns>DataSet</returns>
public override DataSet ExeProcedure(string p_ProcedureName, SqlParameter[] p_SqlParameterArray, int p_TableIndex)
{
DataSet ds = new DataSet();
SqlDataAdapter da = new SqlDataAdapter(p_ProcedureName, this._conn);
da.SelectCommand.CommandType = CommandType.StoredProcedure;
foreach(SqlParameter Sq in p_SqlParameterArray)
{
da.SelectCommand.Parameters.Add( Sq);
}
da.Fill(ds);
return ds;
}
}
}
DBOperator mydb=new DBOperator();//进行实例化
mydb.类中的方法或者函数;
假设有一个抽象类: <形状>
并且有三个类继承了<形状>,它们是《三角形》《矩形》《正方形》
如果开关里有一个抽象方法:
public void PrintArea() {}; //输出面积如果《形状》类是abstract 的,那么《三角形》《矩形》《正方形》
里面都必须定义各自的计算面积的方法,如果不定义,那么就会出错,因为它们三者计算面积的方法
是不同的。
假如《三角形》类没有定义PrintArea() 方法,则程序运行在多态时,调用〈三角形〉的方法时就会
出错。
基类PrintArea() 方法的abstract 就限制了《三角形》《矩形》《正方形》必须都有自己的方法 PrintArea() ,这是abstract 规定的。