📄 defaultprovider.cs
字号:
using System;
using System.Collections;
using System.Data;
namespace OceanSoft.Data
{
/// <summary>
/// 通用数据访问接口默认实现类
/// </summary>
public abstract class DefaultProvider:ICommonAccess
{
/// <summary>
/// 连接对象,此时为接口
/// </summary>
protected IDbConnection Conn=null;
/// <summary>
/// 命令对象,此时为接口
/// </summary>
protected IDbCommand Cmd;
/// <summary>
/// 事务对象,此时为接口
/// </summary>
private IDbTransaction Trans;
//定义属性维持变量
private string m_CommandString;
private Hashtable m_CommandParams;
private bool m_IsStoredProcedure;
#region ICommonAccess 成员
/// <summary>
/// 命令字符串属性
/// </summary>
public string CommandString
{
get{return m_CommandString;}
set{m_CommandString=value;}
}
/// <summary>
/// 命令对象的参数集属性
/// </summary>
public Hashtable CommandParams
{
get{return m_CommandParams;}
set{m_CommandParams=value;}
}
/// <summary>
/// 是否为存储过程属性
/// </summary>
public bool IsStoredProcedure
{
get{return m_IsStoredProcedure;}
set{m_IsStoredProcedure=value;}
}
/// <summary>
/// 启动事务
/// </summary>
public void BeginTrans()
{
this.Open();
this.Trans=this.Conn.BeginTransaction();
this.Cmd.Transaction=this.Trans;
}
/// <summary>
/// 提交事务
/// </summary>
public void CommitTrans()
{
this.Trans.Commit();
}
/// <summary>
/// 回滚事务
/// </summary>
public void RollbackTrans()
{
this.Trans.Rollback();
}
/// <summary>
/// 打开数据库连接,并创建命令对象
/// </summary>
public void Open()
{
if(this.Conn.State!=ConnectionState.Open)
{
this.Conn.Open();
this.Cmd=Conn.CreateCommand();
}
}
/// <summary>
/// 关闭连接
/// </summary>
public void Close()
{
if(this.Conn.State==ConnectionState.Open)
this.Conn.Close();
}
/// <summary>
/// 得到数据库连接对象
/// </summary>
/// <returns></returns>
public IDbConnection GetConnection()
{
this.Open();
return this.Conn;
}
/// <summary>
/// 得到命令对象
/// </summary>
/// <returns></returns>
public IDbCommand GetCommand()
{
this.Open();
return this.Cmd;
}
/// <summary>
/// 得到空数据适配器对象
/// </summary>
/// <returns>空数据适配器对象</returns>
public abstract IDbDataAdapter GetNullDataAdapter();
/// <summary>
/// 设置参数的方法
/// </summary>
protected abstract void SetParams();
/// <summary>
/// 根据属性值,填充命令
/// </summary>
private void FillCommand()
{
this.Open();
this.Cmd.CommandText=m_CommandString;
if(m_IsStoredProcedure)
{
this.Cmd.CommandType=CommandType.StoredProcedure;
}
else
this.Cmd.CommandType=CommandType.Text;
if(m_CommandParams!=null || this.m_IsStoredProcedure)
{
SetParams();
}
}
/// <summary>
/// 得到数据流对象
/// </summary>
/// <returns>相应的数据流对象</returns>
public IDataReader GetDataReader()
{
this.FillCommand();
return this.Cmd.ExecuteReader();
}
/// <summary>
/// 执行命令对象,得到受影响的行数或存储过程的返回值
/// </summary>
/// <returns>受影响的行数或存储过程的返回值</returns>
public int RunSql()
{
this.FillCommand();
int rt = 0;
if(this.m_IsStoredProcedure)
{
this.Cmd.ExecuteNonQuery();
rt = this.GetReturnValue();
}
else
{
rt = this.Cmd.ExecuteNonQuery();
}
return rt;
}
/// <summary>
/// 得到存储过程的返回参数值
/// </summary>
/// <returns></returns>
protected abstract int GetReturnValue();
/// <summary>
/// 得到运行结果集中首行首列的值
/// </summary>
/// <returns>首行首列的值</returns>
public object GetScalar()
{
this.FillCommand();
return this.Cmd.ExecuteScalar();
}
/// <summary>
/// 查询得到数据集的方法
/// </summary>
/// <param name="mTableName">数据集中的表名</param>
/// <returns>对应的DataSet</returns>
public DataSet GetDataSet(string mTableName)
{
DataSet ds=new DataSet();
IDbDataAdapter da=this.GetNullDataAdapter();
this.FillCommand();
da.SelectCommand=this.Cmd;
da.Fill(ds);
if(mTableName!=null)
ds.Tables[0].TableName=mTableName;
return ds;
}
/// <summary>
/// 查询得到数据集的方法
/// </summary>
/// <returns>对应的DataSet</returns>
public DataSet GetDataSet()
{
return this.GetDataSet(null);
}
/// <summary>
/// 查询得到数据表的方法
/// </summary>
/// <param name="mTableName">表名</param>
/// <returns>对应的DataTable</returns>
public DataTable GetDataTable(string mTableName)
{
return this.GetDataSet(mTableName).Tables[0];
}
/// <summary>
/// 查询得到数据表的方法
/// </summary>
/// <returns>对应的DataTable</returns>
public DataTable GetDataTable()
{
return this.GetDataTable(null);
}
/// <summary>
/// 填充数据集的方法
/// </summary>
/// <param name="mDataSet">数据集对象</param>
public void Fill(DataSet mDataSet)
{
this.FillCommand();
IDbDataAdapter da = this.GetNullDataAdapter();
da.SelectCommand = this.Cmd;
da.Fill(mDataSet);
}
/// <summary>
/// 填充数据表的方法
/// </summary>
/// <param name="mDataTable">数据表对象</param>
public void Fill(DataTable mDataTable)
{
this.FillCommand();
IDbDataAdapter da = this.GetNullDataAdapter();
da.SelectCommand = this.Cmd;
this.FillTable(da,mDataTable);
}
/// <summary>
/// 通过派生类对数据表进行填充
/// </summary>
/// <param name="da">用于填充的适配器对象</param>
/// <param name="mDataTable">数据表对象</param>
protected abstract void FillTable(IDbDataAdapter da,DataTable mDataTable);
#endregion
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -