一个类中多次连接数据库,只实例化一次可以吗

来源:百度知道 编辑:UC知道 时间:2024/09/21 12:24:27
比如这样
沉淀感觉 14:15:43
public class Services
{

/// </summary>
//给 Database类(连接数据库和公有方法的类) 创建一个实例。
/// </summary>
Common.DataAccessLayer.Database database = new Common.DataAccessLayer.Database();

public static Employee get_1()
{
database.GetDataReader("XXX");
database.close();

}

public static Employee get_2()
{
database.GetDataReader("CCC");
database.close();
}

public static Employee get_3()
{
database.GetDataReader("VVV");
database.close();
}

还是说在每个方法中都要实例化一次
avenger19,你太好了,我有点明白了 决定给你追加30分``能再说清楚点么 ,我把我的
Common.DataAccessLayer.Database 发给你看:
protected void Open()
{
if (Connection == null)
{
Connection = new OdbcConnection(ConnectionString);

首先,你的这个database成员变量没有加修饰符,是非静态的,protected的,在static的方法中调用是会出语法错误的。
其次,维持数据库连接是不科学的,数据库服务器的承受能力也有限,所以应该是每次访问数据库的时候打开连接,访问结束之后立即释放。
是否需要反复实例化要看这个Common.DataAccessLayer.Database类是怎么写的,如果这个类在GetDataReader方法里做的Connection.Open()和Connection.Close()(SqlConnection? 或者其他),那么只实例化一次是OK的(这样做也是符合常理的)。否则的话就应该每次调用方法都重新实例化。

我看到每个GetDataReader之后都有一个Close()方法,那么我认为应该是第一种情况。
----------------------------------------------------------------------
首先很抱歉,我不用QQ

关于Database类的代码:
我觉得如果你对它的功能要求不是很复杂的话,可以把Open和Close方法去掉(或者改成private的),把打开和关闭连接的操作都整合到访问数据库的方法中,以达到更好的封装效果。当然如果你的程序需要暴露Open和Close 的接口就算了。
----------------------------------------------------------------------
看来你还不是很理解“封装”的概念。封装的意思是隐藏代码,就是说提供尽量简单的接口,使用者只知道这个接口可以做什么事情,但不知道具体的实现途径。例如这里,如果将Open和Close整合到GetDataReader中,我只知道可以获得一个DataReader,但不知道需要先Open,获得DataReader,然后Close这样的过程。目前你的做法是这样的:在GetDataReader中Open,但是需要调用DataBase.Close方法来关闭。我看过你的第一段代码就可以猜出里面大致是如何实现的了,这就说明封装的不完善。

可以共享用的。你只要在下一次数据库操作之前关