共享资源(用C#写的数据访问类)+祝贺儿子周岁生日+散分
用C#写的数据访问类,请大家多多批评,同时祝贺儿子周岁生日,大家进来领分
==========================
using System;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.ComponentModel;
using System.Collections;
using System.Diagnostics;
using System.Data;
using System.Text;
using System.Data.SqlClient;
using System.Web.Caching;
namespace JSY
{
/// <summary>
/// ===数据访问类 作者:贾世义 2005-03-10===
/// </summary>
public class Config :Page
{
private SqlConnection cn;
private SqlCommand cmd;
private SqlTransaction tran;
private SqlDataReader dr;
private Page LoadPage;
public bool RunStatus=true;//当测试程序时在Web.config <AppSettings>设置<add key="RunStatus" value="0"></add>
可以弹出具体错误提示
/// <summary>
/// 构造函数
/// </summary>
/// <param name="page">调用页Page</param>
public Config(Page page)
{
LoadPage=page;
if (LoadPage.Cache["RunStatus"]==null)
{
if (System.Configuration.ConfigurationSettings.AppSettings["RunStatus"]!=null ||
System.Configuration.ConfigurationSettings.AppSettings["RunStatus"]=="0")
{
LoadPage.Cache["RunStatus"]=0;
}
else
{
LoadPage.Cache["RunStatus"]=1;
}
}
RunStatus=((int)LoadPage.Cache["RunStatus"]==1);
}
/// <summary>
/// 析构函数(如果忘记关闭资源)
/// </summary>
~Config()
{
if (cn != null)
{
Close();
}
}
/// <summary>
/// 打开数据库
/// </summary>
private void open()
{
if (cn==null)
{
cn = new
SqlConnection("server=127.0.0.1;database=YourDB;UID=jsy;PWD=jsy;Pooling=true;Connection Reset=false;Connection Lifetime=5;Min
Pool Size=5;Max Pool Size=100;");
cn.Open();
cmd=new SqlCommand();
cmd.Connection=cn;
}
else if (cn.State==ConnectionState.Closed)
{
cn.Open();
}
}
/// <summary>
/// 关闭数据库
/// </summary>
public void Close()
{
if (cn != null)
{
if (dr!=null)
{
dr.Close();
}
if (cmd != null)
{
cmd.Dispose();
}
if (tran != null)
{
tran.Dispose();
}
cn.Close();
cn=null;
}
}
/// <summary>
/// 创建Command对象(注意使用参数且不关闭的自己清除参数)
/// </summary>
/// <param name="cmdText">CommandText</param>
/// <param name="iType">CommandType 0:SQL 1:Procedure 2:Table</param>
private void createCmd(ref string cmdText,int iType)
{
open();
cmd.CommandText=@cmdText;
switch (iType)
{
case 0:
cmd.CommandType=CommandType.Text;
break;
case 1:
cmd.CommandType=CommandType.StoredProcedure;
break;
default:
cmd.CommandType=CommandType.TableDirect;
break;
}
}
/// <summary>
/// 调用存储过程创建一个SqlCommand对象
/// </summary>
/// <param name="procName">存储过程</param>
/// <param name="ParamNames">参数数组</param>
/// <param name="ParamValues">参数值数组(少于参数个数时后按""添加)</param>
private void createCmdProc(ref string procName,string[] ParamNames,string[] ParamValues)
{
createCmd(ref procName,1);
for (int i=0;i<ParamNames.Length;i++)
{
SqlParameter p=new SqlParameter();
p.ParameterName="@"+ParamNames[i];
if (i<ParamValues.Length)
{
p.Value=@ParamValues[i];
}
else
{
p.Value="";
}
cmd.Parameters.Add(p);
}
cmd.Parameters.Add(new SqlParameter("@RETURN_VALUE", SqlDbType.Int, 4,
ParameterDirection.ReturnValue, false, 0, 0,
string.Empty, DataRowVersion.Default, null));
}
/// <summary>
/// 执行存储过程(执行后关闭数据库)
/// </summary>
/// <param name="procName">存储过程名称</param>
/// <param name="ParamNames">参数数组</param>
/// <param name="ParamValues">参数值数组(少于参数个数时后按""添加)</param>
/// <returns>是否正确执行</returns>
public bool RunProc(string procName,string[] ParamNames,string[] ParamValues)
{
createCmdProc(ref procName,ParamNames,ParamValues);
bool isRun=false;
try
{
isRun=(cmd.ExecuteNonQuery()!=-1);
Close();
}
catch (SqlException se)
{
Close();
if (RunStatus)
{
LoadPage.Server.Transfer("/Error.htm",true);
}
else
{
LoadPage.Server.Transfer("/Error.aspx?Err="+procName+"<br>"+se.Message,true);
}
}
return isRun;
}
/// <summary>
/// 将数据填充到数据集(数据库不关闭)
/// </summary>
/// <param name="ds">填充的数据集</param>
/// <param name="strSql">select语句</param>
/// <param name="tbl">表名</param>
/// <returns>成功返回true</returns>
private bool getDs(DataSet ds,ref string strSql,string tbl)
{
bool isRun=true;
try
{
createCmd(ref strSql,0);
SqlDataAdapter ada = new SqlDataAdapter(cmd);
ada.Fill(ds,tbl);
}
catch(SqlException se)
{
isRun=false;
Close();
if (RunStatus)
{
LoadPage.Server.Transfer("/Error.htm",true);
}
else
{
LoadPage.Server.Transfer("/Error.aspx?Err="+strSql+"<br>"+se.Message,true);
}
}
return isRun;
}
/// <summary>
/// 按SQL语句获得指定DataTable对象(数据库不关闭)
/// </summary>
/// <param name="strSql">SQL语句</param>
/// <returns>DataTable对象</returns>
public DataTable GetTable(string strSql)
{
DataTable dt=null;
DataSet ds=new DataSet();
if (getDs(ds,ref strSql,"tbl"))
{
if (ds.Tables[0].Rows.Count>1)
{
dt=ds.Tables[0];
}
}
return dt;
}
/// <summary>
/// 按SQL语句获得指定DataReader对象(不能关闭,记得在使用完DataReader关闭)
/// </summary>
/// <param name="strSql">SQL语句</param>
/// <returns>DataReader对象</returns>
public SqlDataReader GetDataReader(string strSql)
{
try
{
createCmd(ref strSql,0);
dr = cmd.ExecuteReader();//System.Data.CommandBehavior.CloseConnection
}
catch(SqlException se)
{
Close();
if(RunStatus)
{
LoadPage.Server.Transfer("/Error.htm",true);
}
else
{
LoadPage.Server.Transfer("/Error.aspx?Err="+@strSql+"<br>"+se.Message,true);
}
}
return dr;
}
/// <summary>
/// 按存储过程获得指定DataReader对象(不能关闭,记得在使用完DataReader关闭)
/// </summary>
/// <param name="procName">存储过程名称</param>
/// <param name="ParamNames">参数数组</param>
/// <param name="ParamValues">参数值数组(少于参数个数时后按""添加)</param>
/// <returns>DataReader对象</returns>
public SqlDataReader GetDataReaderProc(ref string procName, string[] ParamNames,string[] ParamValues)
{
try
{
createCmdProc(ref procName,ParamNames,ParamValues);
dr = cmd.ExecuteReader();
cmd.Parameters.Clear();
}
catch(SqlException se)
{
Close();
if (RunStatus)
{
LoadPage.Server.Transfer("/Error.htm",true);
}
else
{
LoadPage.Server.Transfer("/Error.aspx?Err="+procName+"<br>"+se.Message,true);
}
}
return dr;
}
/// <summary>
/// 执行Sql语句
/// </summary>
/// <param name="strSql">Sql语句</param>
/// <returns>是否成功</returns>
public bool RunSql(string strSql)
{
bool isRun=true;
try
{
createCmd(ref strSql,0);
isRun=(cmd.ExecuteNonQuery()>0);
}
catch(SqlException se)
{
isRun=false;
Close();
if (RunStatus)
{
LoadPage.Server.Transfer("/Error.htm",true);
}
else
{
LoadPage.Server.Transfer("/Error.aspx?Err="+@strSql+"<br>"+se.Message,true);
}
}
return isRun;
}
/// <summary>
/// 执行Sql语句并关闭数据库
/// </summary>
/// <param name="strSql">Sql语句</param>
/// <returns>是否成功</returns>
public bool RunSqlClose(string strSql)
{
bool isRun=RunSql(strSql);
Close();
return isRun;
}
}
}