我在公共类里的方法
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);
}我的SqlConnection 是不是断线了?我的逻辑哪里错了呢?ado.net
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);
}我的SqlConnection 是不是断线了?我的逻辑哪里错了呢?ado.net
你SqlDataReader用完了也得用using释放;你给加这么个参数就行;
SqlDataReader myrea = mycom.ExecuteReader(CommandBehavior.CloseConnection);
CommandBehavior.CloseConnection这个参数表示,当用户使用完毕DataReader后,当关闭DataReader时,自动关闭与其关联的Connection
catch(SqlException ex)
{
throw new Exception(ex.Message);
}
这个块代码,隐藏了异常的实际细节,且表面上的结果也和不try catch是一样,又为何要多此一举?