读书人

[]C# 怎么调用公共类返回的SqlDataRea

发布时间: 2013-01-22 10:23:54 作者: rapoo

[求助]C# 如何调用公共类返回的SqlDataReader
我在公共类里的方法
namespace mySql
{
class database
{
public SqlDataReader getreader(string sql)
{
using (SqlConnection mycon = new SqlConnection(con))
{
SqlCommand mycom = new SqlCommand(sql, mycon);
mycon.Open();
mycom.CommandType = CommandType.StoredProcedure;
try
{
SqlDataReader myrea = mycom.ExecuteReader();
return myrea;
}
catch(SqlException ex)
{
throw new Exception(ex.Message);
}


}
}

}

}
调用的代码
database db = new database();
SqlDataReader ownread = db.getreader("maxsell");
while (ownread.Read())
{
string a1 = ownread.GetString(0);
string a2 = ownread.GetDouble(1).ToString();
string a3 = ownread.GetDouble(2).ToString();

label5.Text = string.Format("销售最热产品是{0},销量{1},总价{2}", a1, a2, a3);
string maxmonth = " select month(销售时间)from sell where 商品数量=(select MAX(商品数量)from sell)";
label6.Text = database.getProfit(maxmonth);
}
[]C# 怎么调用公共类返回的SqlDataReader
我的SqlConnection 是不是断线了?我的逻辑哪里错了呢?

ado.net
[解决办法]
你使用了using 关键字,因此在离开这个作用域时,连接就断开了。
[解决办法]
LS说的很清楚了
[解决办法]
1L说的很清楚了。去掉using
[解决办法]
你用SqlConnection的时候只能用using把它释放,所以不用去掉using;
你SqlDataReader用完了也得用using释放;

你给加这么个参数就行;
SqlDataReader myrea = mycom.ExecuteReader(CommandBehavior.CloseConnection);
CommandBehavior.CloseConnection这个参数表示,当用户使用完毕DataReader后,当关闭DataReader时,自动关闭与其关联的Connection
[解决办法]
datareader是需要连接持续开启的,所以getreader的方法里不能用using connection或者关闭connection。可以通过using调用getreader来在结束时自动关闭连接。

其次,lz,
catch(SqlException ex)
{
throw new Exception(ex.Message);
}

这个块代码,隐藏了异常的实际细节,且表面上的结果也和不try catch是一样,又为何要多此一举?
[解决办法]
如果你可以先扔掉什么“公共类”而归于简单的话,那么可以我在帖子《该如何定义一个集合来保存我从数据库中得到的多行数据》中回复的代码。然后,如果你可以设计程序,可以自己提炼出所谓公共类应该抽象出什么代码来。

封装一个高级一点的SQLHelper时返回 DbDataReader 的所谓公共类是被认为有设计思路错误的。

读书人网 >C#

热点推荐