ASP.NET"未指定的错误"解答

 
ASP.NET"未指定的错误"解答
2010-04-29 16:05
第一种情况:当打开页面时,没有这样的错误提示,但是当你反复刷新就会出“未指定的错误”!

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

错误原因:没有及时关闭数据库和释放资源造成的。而使用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

第二种情况:没有正确获取数据库连接字符串,请检查数据库连接代码。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值