我看到一个不用visual那样可视化调用数据库的例子,它创建一个DBase类进行调用。例子代码见下面。我有几个问题请教一下:
1.用这个类进行数据库的查询和操作,每次新建一个类时它都会建一个connection,然后将一个dataadapter,dataset.我想这样每次打开关闭数据库不是都要耗费资源,能不能在一个项目中只建立一次链接和dataadapter,dataset。每次操作时只是增加和删除datatable,不用关闭。这样可以节约资源。
请问大家这样理解有没有问题,该怎么做?代码改如何改?
谢谢!using System;
using System.Data;
using System.Data.SqlClient;
using System.Data.OleDb;
using System.Collections;
namespace account.Class
{
public class DBase
{
protected OleDbConnection conn;
public DBase()
{
var var = new var();
string connectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=DataBase\\Account.mdb";
try
{
openConnection(connectionString);
}
catch
{
}
}
private void openConnection()
{
if (conn.State == ConnectionState.Closed)
{
conn.Open ();
}
} private void closeConnection()
{
if (conn.State == ConnectionState.Open )
{
conn.Close ();
}
}
public DataTable openQuery(string query)
{
OleDbDataAdapter dsCmd = new OleDbDataAdapter ();
DataSet dset = new DataSet ();
DataTable dtable = null; dsCmd.SelectCommand = new OleDbCommand(query, conn);
openConnection();
dsCmd.Fill(dset, "mine");
dtable = dset.Tables[0];
closeConnection();
if (dtable!=null)
return dtable;
else
return null;
} public bool ExeSql(string query)
{
OleDbCommand adcmd = new OleDbCommand(@query, conn);
openConnection();
adcmd.ExecuteNonQuery();
closeConnection();
return true;
}
private void openConnection(string connectionString)
{
conn = new OleDbConnection(connectionString);
} public OleDbConnection getConnection()
{
return conn;
}
}
}
1.用这个类进行数据库的查询和操作,每次新建一个类时它都会建一个connection,然后将一个dataadapter,dataset.我想这样每次打开关闭数据库不是都要耗费资源,能不能在一个项目中只建立一次链接和dataadapter,dataset。每次操作时只是增加和删除datatable,不用关闭。这样可以节约资源。
请问大家这样理解有没有问题,该怎么做?代码改如何改?
谢谢!using System;
using System.Data;
using System.Data.SqlClient;
using System.Data.OleDb;
using System.Collections;
namespace account.Class
{
public class DBase
{
protected OleDbConnection conn;
public DBase()
{
var var = new var();
string connectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=DataBase\\Account.mdb";
try
{
openConnection(connectionString);
}
catch
{
}
}
private void openConnection()
{
if (conn.State == ConnectionState.Closed)
{
conn.Open ();
}
} private void closeConnection()
{
if (conn.State == ConnectionState.Open )
{
conn.Close ();
}
}
public DataTable openQuery(string query)
{
OleDbDataAdapter dsCmd = new OleDbDataAdapter ();
DataSet dset = new DataSet ();
DataTable dtable = null; dsCmd.SelectCommand = new OleDbCommand(query, conn);
openConnection();
dsCmd.Fill(dset, "mine");
dtable = dset.Tables[0];
closeConnection();
if (dtable!=null)
return dtable;
else
return null;
} public bool ExeSql(string query)
{
OleDbCommand adcmd = new OleDbCommand(@query, conn);
openConnection();
adcmd.ExecuteNonQuery();
closeConnection();
return true;
}
private void openConnection(string connectionString)
{
conn = new OleDbConnection(connectionString);
} public OleDbConnection getConnection()
{
return conn;
}
}
}
adapter会自动关闭吧,缓存在dataset中就断开连接,操作完在跟数据库做次交互更新数据。