关于数据库访问类做成静态的还是可实例化的好? 小项目,有人说static不好,因为会占着资源不放,但我看的很多人的代码都是static,包括微软的那个访问类。到底改怎么写? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 你问问他他知道占多少资源吗?可以计算出这种损失值几毛钱吗?static的问题,是在于可能造成你的程序在并发使用、或者嵌套使用时,程序垮掉。如果ADO.NET对数据库操作需要单独的DBConnection,而你弄个共享的,那么类似DBDataReader等等操作就会垮掉。你测试过并发多用户多页面使用、以及在一个使用DataReader的循环中嵌套创建和使用另一个DataReader的情况吗? 对于那些拿着必然存在的鸡毛,夸张地来当作决策依据的,其实可以不用太认真。你应该从从能可行上去考虑,特别是考虑到并发(因为asp.net处理客户端请求就是多线程的)情况下的功能可行性。根本不可行的功能,这就更谈不上去选择“省资源”的做法了。 public static SqlConnection con?这样写? c/s的可以这样写的吧,B/S的就不行了 类不是静态的,类中获取数据的方法是静态的,类的字段,属性等也不是静态的,这样可以吧?另外我看有人这么写:public static readonly string cnstr=数据库连接字符串,这样好不好? 有什么毛病?我看到这样的代码public class DataAccess{ private static OleDbConnection Conn = new OleDbConnection(); private static OleDbCommand Cmd = new OleDbCommand(); public DataAccess() { } /// <summary> /// 打开连接 /// </summary> public static void Open() { if (Conn.State.Equals(ConnectionState.Closed)) { Conn.ConnectionString = "Provider=Microsoft.Jet.OleDb.4.0;Data Source=" + System.Web.HttpContext.Current.Server.MapPath("~/App_Data/Gangxing.mdb"); Cmd.Connection = Conn; Conn.Open(); } } /// <summary> /// 关闭连接 /// </summary> public static void Close() { if (Conn.State == ConnectionState.Open) { Conn.Close(); Conn.Dispose(); Cmd.Dispose(); } } public static DataSet GetDataSet(string sql) { try { Open(); OleDbDataAdapter Da = new OleDbDataAdapter(sql, Conn); DataSet Ds = new DataSet(); Da.Fill(Ds); return Ds; } catch (Exception e) { throw new Exception(e.Message,e); } finally { Close(); } }} 一般类似于SqlHelper都是做成静态的。 就是说,数据访问类都不写成静态的,用到的地方new一个,这样是最好的是吗? private static OleDbConnection Conn = new OleDbConnection(); //有错误静态方法可以用,静态对象会有问题。 static 可以少些个new 方便那么点,为了那么点点方便不考虑并发确实有点犯了。小项目虽小但是也能看出一个人的编码习惯! mvc3 url.action传值的问题 asp.net 中全局变量如何定义? 子窗口和父窗口之间的值传递问题? 怎样取消验证控件的验证功能?????(加急 在线等) 如何让一个页面刷新另一个页面 treeview的xml数据源的问题,大家来解救以下。 求网站缓存的解决方案 URL传递汉字。 请问RegisterClientScriptBlock问题 好奇怪的问题啊,请大家进来帮我看看! 图片上传功能 .net网站重复卖给不同的客户的有效解决方案。
public static readonly string cnstr=数据库连接字符串,这样好不好?
有什么毛病?我看到这样的代码public class DataAccess
{
private static OleDbConnection Conn = new OleDbConnection();
private static OleDbCommand Cmd = new OleDbCommand(); public DataAccess()
{ } /// <summary>
/// 打开连接
/// </summary>
public static void Open()
{
if (Conn.State.Equals(ConnectionState.Closed))
{
Conn.ConnectionString = "Provider=Microsoft.Jet.OleDb.4.0;Data Source="
+ System.Web.HttpContext.Current.Server.MapPath("~/App_Data/Gangxing.mdb");
Cmd.Connection = Conn;
Conn.Open();
}
} /// <summary>
/// 关闭连接
/// </summary>
public static void Close()
{
if (Conn.State == ConnectionState.Open)
{
Conn.Close();
Conn.Dispose();
Cmd.Dispose();
}
}
public static DataSet GetDataSet(string sql)
{
try
{
Open();
OleDbDataAdapter Da = new OleDbDataAdapter(sql, Conn);
DataSet Ds = new DataSet();
Da.Fill(Ds);
return Ds;
}
catch (Exception e)
{
throw new Exception(e.Message,e);
}
finally
{
Close();
}
}
}
就是说,数据访问类都不写成静态的,用到的地方new一个,这样是最好的是吗?
//有错误
静态方法可以用,静态对象会有问题。
小项目虽小但是也能看出一个人的编码习惯!