数据访问抽象基础类(ACCESS) DbHelperACE中有ExecuteReader(string strSQL)方法:
/// <summary>
/// 执行查询语句,返回OleDbDataReader(使用该方法切记要手工关闭OleDbDataReader和连接)
/// </summary>
/// <param name="strSQL">查询语句</param>
/// <returns>SqlDataReader</returns>
public static OleDbDataReader ExecuteReader(string strSQL)
{
OleDbConnection connection = new OleDbConnection(connectionString);
OleDbCommand cmd = new OleDbCommand(strSQL, connection);
try
{
connection.Open();
OleDbDataReader myReader = cmd.ExecuteReader();
return myReader;
}
catch (System.Data.OleDb.OleDbException e)
{
throw new Exception(e.Message);
}
//finally //不能在此关闭,否则,返回的对象将无法使用
//{
// cmd.Dispose();
// connection.Close();
//}
}
这里没提供手工关闭OleDbDataReader和连接的方法。具体调用时如何手工关闭没有例子可查。
我使用以下方法,是否可行待大家讨论。
public class XXXXCollection : System.Collections.ObjectModel.ObservableCollection<DataItem>
{
}
private XXXXCollection _Collection = GetXXXXData();
public XXXXCollection Collection
{
get
{
return this._Collection;
}
}
public static XXXXCollection GetXXXXData() //获取数据
{
OleDbConnection con = new OleDbConnection(DbHelperACE.connectionString);
string sql = string.Format(……);
XXXXCollection xxxx = new XXXXCollection();
OleDbDataReader myreader = DbHelperACE.ExecuteReader(sql);
while (myreader.Read())
{
DataItem axxxx = new DataItem(……);
xxxx.Add(axxxx);
}
con.Open();
OleDbCommand cmd = new OleDbCommand("",con);
myreader = cmd.ExecuteReader(CommandBehavior.CloseConnection); //手工关闭OleDbDataReader和连接
cmd.Dispose();
con.Close();
return xxxx;
}