ExecuteReader 要求已打开且可用的 Connection。连接的当前状态为打开。

别人都提示已关闭,我提示状态为打开,好像有区别的。数据库连接类我的写法是:publicstaticSqlConnectionConnection{get{stringco... 别人都提示已关闭,我提示状态为打开,好像有区别的。
数据库连接类我的写法是:
publicstaticSqlConnection Connection
{
get
{
string connectionString = "server=(local);uid=sa;pwd=sa123456;Trusted_Connection=no;database=OutLight;MultipleActiveResultSets=true";
if (connection == null)
{
connection = newSqlConnection(connectionString);
connection.Open();
}
elseif (connection.State == System.Data.ConnectionState.Closed)
{
connection.Open();
}
elseif (connection.State == System.Data.ConnectionState.Broken)
{
connection.Close();
connection.Open();
}
return connection;
}
}
public static SqlDataReader GetReader(string sql, params SqlParameter[] values)
{
SqlCommand cmd = new SqlCommand(sql, Connection);
cmd.Parameters.AddRange(values);
SqlDataReader reader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
return reader;
}
调用它的类:

publicstaticIList<ActEvent> GetGetNewEvent(string username)
{
List<ActEvent> list = newList<ActEvent>();
string sql1 = "select lastoperate from SceneInfo where username=@username";
try
{
SqlDataReader reader1 = DBHelper.GetReader(sql1,newSqlParameter("@username", username));
string sql2 = "select * from ActEvent where id>@id order by id desc";
try
{
DataTable table = DBHelper.GetDataSet(sql2, newSqlParameter("@id", lastid));
}
catch (Exception e)
{
Console.WriteLine(e.Message);
ActEvent act = newActEvent();
act.Sevent = "1--"+e.Message + "<br>";
list.Add(act);
return list;
}
}
catch (Exception e)
{
Console.WriteLine(e.Message);
ActEvent act = newActEvent();
act.Sevent = "2--" + e.Message + "<br>";
list.Add(act);
return list;
}
}
字数不够了。如果有想看完整程序的我发邮箱
我邮箱是hdwgz@qq.com
谢谢!
展开
 我来答
维他命水nice
2012-07-30
知道答主
回答量:36
采纳率:0%
帮助的人:22.8万
展开全部
SqlDataReader 打开后.数据库不会自动关闭或乎睁.需要 SqlDataReader.close(),关闭数据库衫岁连接.reader一直占着数据库连接.所以后边的GetDataSet无法执行.

望采顷岁纳.!!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友5456381
2012-07-31 · 超过126用户采纳过TA的回答
知道小有建树答主
回答量:451
采纳率:0%
帮助的人:250万
展开全部
SqlDataReader打开之后默认不会自动关闭连接

这样SqlDataReader使用多了的话会导致连接池无连接可厅告衡用扮做
在使用完SqlDataReader之后进行Close()操作
或者直友凳接使用using(SqlDataReader reader = *************)
这种方式会比较好
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
lwq550609824
2012-07-30
知道答主
回答量:65
采纳率:0%
帮助的人:25.4万
展开全部
用using()
{
}
多好
自动释放资源
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Andyyujun
2012-07-30 · 超过16用户采纳过TA的回答
知道答主
回答量:138
采纳率:0%
帮助的人:52.2万
展开全部
你要在每次用完山则datareader 数据查完大猜了 就要reder.close() 不然 再次调用的时候就会逗仿棚报错
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式