用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;
}
}
}
==========================
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;
}
}
}
解决方案 »
- 怎样让网站在百度搜索结果中显示用户搜索的关键字?
- asp.net2.0设计模式下图片能看见,调试在浏览器中不能显示,什么原因?
- css样式问题!!!!!!急啊 在线等!!!谢谢了!!!
- 做一个安全的网站,在写代码时需要注册什么呢?
- 紧急求助!!关于ASP。NET端口问题?
- 如何判断一个页面是否在另一页面的iframe里?
- .NET 动态删除表格的行问题
- 关于图片上传的问题
- 一个aspx页面中,有两个用户控件A,B.其中A控件中定义了很多的全局变量,在aspx页面执行时A先于B执行,然后B要调用A中的数据?
- 怪问题啊,第一次碰到
- 如何在框架页面内实现页面跳转???请指点
- 弱智问题(找不到类型或命名空间名称)
http://community.csdn.net/Expert/TopicView3.asp?id=4164141
这是我写的,参考一下吧
看来偶要努力繁殖后代了:)
/// <summary>
/// 绑定Repeater控件不分页(不关闭数据库)
/// </summary>
/// <param name="strSql">SQL语句</param>
/// <param name="rpt">控件id</param>
public void BindCtrl(string strSql,Repeater rpt)
{
dr=GetDataReader(strSql);
if (dr!=null)
{
rpt.DataSource=dr;
rpt.DataBind();
dr.Close();
}
}
以上公布的只是自己写的数据访问的函数,使用了缓冲池;在一次数据访问期间中使用了同一个ADO.NET对象;如果语句出错在调试状态下,直接输出错误语句并停止程序运行,调用时更方便;
=========================================
我会继续努力!谢谢大家的批评
ds.Tables[0].Rows.Count>1
是不是只返回一个空的DataTable,这算不算一个Bug
一点意见,顺祝贵子健康,感谢楼主分享
第一:以上公布的只是自己写的数据访问的函数,在这个类中我还使用了将界面中WEB控件传入形成语句获取数据初始化WEB控件及从WEB控件获取数据,形成语句写入数据库等
第二:我目前的存储过程均没有使用输出参数
第三:我写错了
================================================================
email:[email protected]
================================================================
应该是这样:V aspx-> C 对应aspx.cs文件 -> V bin 里的底层类
这就是标准的MVC模式了,用起来很爽的
恭喜恭喜
DotNet中华网:www.aspxcn.org
DotNet中华网:www.aspxcn.org
我是看过你的高处不胜寒ASP.NET 2.0示例后作的,从你那里学了很多东西,表示非常感谢
不过我已经进行了很大的改动,除了名称参数相近之外,内部已经进行了彻底改变
所以,公布的时候没有将您作为原作者,在这里表示歉意
声明一下,本人并非剽窃。
以上部分确为本人所写,保留原作者的部分名称也是出于尊重