分享

异常详细信息: System.Data.OleDb。OleDbException 未指定的...

 liyuepiaoxue 2010-08-19

ASP.NET错误原因:没有及时关闭数据库和释放资源造成的。而使用DataReader对象时就特别容易犯这样的错误。为什么这样说呢?下面我们来介绍一下DataReader对象:

DataReader对象提供了以顺序的、只读的方式读取Command对象获得的数据结果集。而DataReader有一个Close()方法,该方法不带参数,无返回值,用来关闭DataReader对象。由于DataReader在执行SQL命令时一直要保持同数据库的连接,所以在DataReader对象开启的状态下,该对象所对应的Connection连接对象不能用来执行其它操作。所以,在使用完DataReader对象时,一定要用Close()方法关闭,否则不仅会影响到数据库的效率,更会阻止其它对象使用Connection连接对象来访问数据库(即:未指定的错误)。

如果把数据库的操作都封装到了一个类中,但DataReader只有在读取完毕时才能关闭数据库,这样类中就不能关闭数据库连接。如果在函数中就关闭了会提示“阅读器关闭时Read的尝试无效” 。微软兄弟肯定会想到这样的问题,会为我们考虑周到的,下面是解决方法:

public OleDbDataReader ExecuteReader(string sql)
{
this.OpenConn();
OleDbCommand cmd = new OleDbCommand(sql, conn);
cmd.CommandTimeout = 15;
cmd.CommandType = CommandType.Text;
OleDbDataReader dr;
try
{
dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
}
catch(Exception e)
{
throw new Exception(e.Message);
}
cmd.Dispose();
return dr;
}

MSDN中对CommandBehavior.CloseConnection的解释是“在执行该命令时,如果关闭关联的 DataReader对象,则关联的Connection 对象也将关闭。

程序在需要的时候我就直接构造好SQL语句,调用这个函数即可,如下:

con.Open();
string sql=”select * form student”;
//调用数据库操作通用类中的GetReader函数,返回SqlDataReader
SqlDataReader dr = con.ExecuteReader(sql);
if(dr.Read())
{
读出数据,赋值给页面控件
}
dr.Close();//操作完毕,关闭DataReader

第二种情况:没有正确获取数据库连接字符串,请检查数据库连接代码

转载本博客文章请注明,转载自: 极数博客 本文地址: http:///?p=4238

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多