用SqlDataReader做DataList的数据源总是出错

我在页面做了一个DataList,数据源引用了数据层的一个类,如下:publicSqlDataReaderExecuteReader(stringsql){using(c... 我在页面做了一个DataList,数据源引用了数据层的一个类,如下:
public SqlDataReader ExecuteReader(string sql)
{
using (cnn = new SqlConnection(ConnectionString))
{
SqlCommand cmd = new SqlCommand(sql, cnn);
if (sql.StartsWith("SELECT") | sql.StartsWith("select"))
{
cmd.CommandType = CommandType.Text;
}
else
{
cmd.CommandType = CommandType.StoredProcedure;
cnn.Open();
}
SqlDataReader dr;
try
{
dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
return dr;
}
catch (Exception ee)
{
cnn.Close();
throw ee;
}
}
我传入了一个sql语句,返回一个SqlDataReader
但是运行页面后总是显示:
ExecuteReader 要求已打开且可用的连接。连接的当前状态为已关闭。
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。

异常详细信息: System.InvalidOperationException: ExecuteReader 要求已打开且可用的连接。连接的当前状态为已关闭。

源错误:

行 114: {
行 115: cnn.Close();
行 116: throw ee;
行 117: }
行 118: }
展开
 我来答
华华兮
2009-09-05 · TA获得超过232个赞
知道小有建树答主
回答量:173
采纳率:0%
帮助的人:140万
展开全部
应该是你的if语句里面没有cnn.open()吧。command要打开了数据库才行!
最后的仙人
2009-09-05 · TA获得超过1961个赞
知道大有可为答主
回答量:1509
采纳率:0%
帮助的人:1402万
展开全部
不能直接用SqlDataReader吧,因为SqlDataReader是用来要一行行的读取数据,它本身并不是存储数据的,所以要么用DataSet,要么就一行行读出来存在一个DataTable中,然后将DataTable作为数据源
可以在dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);后面加上
DataTable tb = new DataTable();
for (int i = 0; i < dr.FieldCount; i++)
{
tb.Columns.Add(new DataColumn());
}
while (dr.Read())
{
object[] obj = new object[dr.FieldCount];
dr.GetValues(obj);
tb.Rows.Add(obj);
}
return tb;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
帅气的地球
2009-09-07 · TA获得超过266个赞
知道小有建树答主
回答量:257
采纳率:0%
帮助的人:145万
展开全部
由错误提示,说明是数据库未连接,你重头查看一下数据库的连接,先看看web.config里边的链接字符串是否正确,再看看connection是否连接,连接上了在什么地方断了。要学会自己找错误的原因
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
甜美且谦逊的光芒9
2009-09-10 · 超过22用户采纳过TA的回答
知道答主
回答量:87
采纳率:100%
帮助的人:55.1万
展开全部
看你写的题应该是执行的一个查询,也就是说你的sql语句里面写着“select"
根据你上面的判断条件,则转入IF()段,而你的cnn.open()是写在else段里面的,所以你的数据库连接未打开。
建议你把Conn.open()写在if-else下面
最后本人声明一下,我是一个编程菜鸟,不知道说的对不对。你写的if()语句里面的内容我都没用过,所以不知道啥意思。上面的只是根据本人仅有的一点知识推出来的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式