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

来源:百度知道 编辑:UC知道 时间:2024/06/22 14:47:57
我在页面做了一个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

应该是你的if语句里面没有cnn.open()吧。command要打开了数据库才行!

不能直接用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;

由错误提示,说明是数据库未连接,你重头查看一下数据库的连接,先看看web.config里边的链接字符串是否正确,再看看connection是否连接,连接上了在什么地方断了。要学会自己找错误的原因

看你写的题应该是执行的一个查询,也就是说你的sql语句里面写着“select"
根据你上面的判断条件,则转入IF()段,而你的cnn.open()是写在else段里面的,所以你的数据库连接未打开。
建议你把Conn.open()写在if-else下面
最后本人声明一下,我是一个编程菜鸟,不知道说的对不对。你写的if()语句里面的内容我都没用过,所以不知道啥意思。上面的只是根据本人仅有的一点知识推出来的。