日期:2014-05-18  浏览次数:20446 次

用acess数据库真郁闷
//关闭数据库
public   static   void   CloseDatabase()
{
OleDbConnection   conn   =   new   OleDbConnection(connectionString);
if   (conn.State   ==   System.Data.ConnectionState.Open)
{
conn.Close();
conn.Dispose();
} }

public   static   OleDbDataReader   ExecuteReader(string   strSQL)//(使用该方法切记要手工关闭SqlDataReader和连接)
{
OleDbConnection   conn   =   new   OleDbConnection(connectionString);
OleDbCommand   cmd   =   new   OleDbCommand(strSQL,conn);
try
{
conn.Open();
return     cmd.ExecuteReader();
}
catch(System.Data.SqlClient.SqlException   e)
{
throw   new   Exception(e.Message);
}
}

调用方法下:
OleDbDataReader   dr   =SQLDAL.ExecuteReader(sql);
while(dr.Read())
{........ }
dr.Close();
SQLDAL.CloseDatabase();//关闭数据库连接,执行到这步时数据库显示是已经关闭的.
但我在文件夹下看mdb时,却是打开的.怎么是这样啊.
进程里能不能查看到.是什么进程.

------解决方案--------------------
在这个方法中你有一个新的OleDbConnection conn对象创建了,而且是没有执行open方法的,所以会报错“已经关闭”,注意这个conn对象不是你执行cmd.ExecuteReader();时的对象。
建议改为return cmd.ExecuteReader(CommandBehavior.CloseConnection);
它表示函数返回的sqldatareader会在清除时自动关闭数据库连接.
调用方法下:
OleDbDataReader dr =SQLDAL.ExecuteReader(sql);
while(dr.Read())
{........ }
dr.Close();//它会自动关闭数据库连接