我的DAL层是这样的:
1.在DBHress.cs里写公用的方法;
里面有有DataReader
代码如下:
protected static string conString = ConfigurationManager.ConnectionStrings["web"].ConnectionString.ToString().Trim();
/*
* GetReader 方法
* 执行SQL简单的语句,返回 DataReader
*
*/
public static SqlDataReader GetReader(string sql)
{
SqlConnection connection = new SqlConnection(conString);
SqlCommand cmd = new SqlCommand(sql, connection); try
{
connection.Open();
SqlDataReader reader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
return reader; }
catch (System.Data.SqlClient.SqlException e)
{
throw new Exception(e.Message);
}
}
2. 我在city_Service.cs这里调用了上面的 GetReader 方法
public static City getCity(int cID)
{
string sql = "select * from City where cID=" + cID;
SqlDataReader r = DBHress.GetReader(sql);
if (r.Read())
{
City city = new City();
city.CID = Convert.ToInt32(r["cID"]);
city.CName = (string)r["cName"];
r.Close();
return city;
}
else
{
r.Close();
return null;
} }问题:
在服务器事件中找到警告!
Exception type: InvalidOperationException Exception message: ExecuteReader 要求已打开且可用的连接。连接的当前状态为正在连接。
------------------------------------------
我不都已经是关了吗? 还是没关完? 还是关错地方?
1.在DBHress.cs里写公用的方法;
里面有有DataReader
代码如下:
protected static string conString = ConfigurationManager.ConnectionStrings["web"].ConnectionString.ToString().Trim();
/*
* GetReader 方法
* 执行SQL简单的语句,返回 DataReader
*
*/
public static SqlDataReader GetReader(string sql)
{
SqlConnection connection = new SqlConnection(conString);
SqlCommand cmd = new SqlCommand(sql, connection); try
{
connection.Open();
SqlDataReader reader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
return reader; }
catch (System.Data.SqlClient.SqlException e)
{
throw new Exception(e.Message);
}
}
2. 我在city_Service.cs这里调用了上面的 GetReader 方法
public static City getCity(int cID)
{
string sql = "select * from City where cID=" + cID;
SqlDataReader r = DBHress.GetReader(sql);
if (r.Read())
{
City city = new City();
city.CID = Convert.ToInt32(r["cID"]);
city.CName = (string)r["cName"];
r.Close();
return city;
}
else
{
r.Close();
return null;
} }问题:
在服务器事件中找到警告!
Exception type: InvalidOperationException Exception message: ExecuteReader 要求已打开且可用的连接。连接的当前状态为正在连接。
------------------------------------------
我不都已经是关了吗? 还是没关完? 还是关错地方?
{
City city = new City();
city.CID = Convert.ToInt32(r["cID"]);
city.CName = (string)r["cName"];
r.Close(); //这样不行啊,人家还在read(),就关闭了,这样只能找一条啊
return city;
}
public static City getCity(int cID)
{
string sql = "select * from City where cID=" + cID;
SqlDataReader r = DBHress.GetReader(sql);
City city = null;
if (r.Read())
{
city = new City();
city.CID = Convert.ToInt32(r["cID"]);
city.CName = (string)r["cName"];
}
r.Close();
return city;
}
这样写是不是即节省了代码又不会出错啦……
楼主既然用上这个地方
干嘛还要通过r.Close(); 这只是关闭阅读器
你的连接还没有关
注意这个含义:SqlDataReader reader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
当关闭sqlconnection 对象 时 他的阅读器 也相应关闭
不知道我说的清楚不