帮忙调试以下的代码?为何出错。
SqlDataReader recu = DBOP.GetDataReader( "Select * from UserS where UserID= ' " + TextBox1.Text.ToString() + " ' and Password= ' " +
TextBox2.Text.ToString() + " ' ");
if (recu.Read()) //这句提示报错。(阅读器关闭时Read的尝试无效)
{
userId = recu[ "UserID "].ToString();
}
recu.Close();
//DBOP.GetDataReader 是写的一个共用类中方法,返回一个SqlDataReader 。代码如下
public SqlDataReader GetDataReader(string selectSql)
{
SqlDataReader RetDataReader;
SqlConnection Conn = new SqlConnection(connString);
try
{
Conn.Open();
SqlCommand Cmd = new SqlCommand(selectSql, Conn);
RetDataReader = Cmd.ExecuteReader();
}
catch
{
RetDataReader = null;
}
finally
{
Conn.Close();
}
return RetDataReader;
}
------解决方案--------------------Conn.Close();
====================
连接都关了,还那里有RetDataReader,DataReader是需要永久连接的,如果你的方法返回值需要他(个人不推荐这样做),那么就不能关闭连接!
------解决方案--------------------1. 如果还是用返回 DataReader的方法,在调用出使用完就关闭连接。虽然CLR会帮我们自动回收垃圾,但这个缺点也是比较明显的,如果忘记关闭连接,可能会产生一些问题。
2. 如果是分层调用,而且打算对数据进行一些更改,可以考虑使用DataSet,这样性能上会有些损耗(占Web服务器的一些内存)