已有打开的与此命令相关联的 DataReader,必须首先将它关闭。

che2piaopiao 2013-10-08 11:21:55
1 ExecuteReader 要求已打开且可用的连接。连接的当前状态为正在连接。
2 已有打开的与此命令相关联的 DataReader,必须首先将它关闭。

经常报这2个错误。大家帮我看看是不是代码哪里有问题。。



private static SqlConnection connection;
public static SqlConnection Connection
{
get
{
string connectionString = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
if (connection == null)
{
connection = new SqlConnection(connectionString);
connection.Open();
}
else if (connection.State == System.Data.ConnectionState.Closed)
{
connection.Open();
}
else if (connection.State == System.Data.ConnectionState.Broken)
{
connection.Close();
connection.Open();
}
return connection;
}
}

//其它的就是调用CONNECTION的了。下面的应该没问题
public static int ExecuteCommand(string safeSql)
{
SqlCommand cmd = new SqlCommand(safeSql, Connection);
int result = cmd.ExecuteNonQuery();
return result;
}




public static int ExecuteCommand(string sql, params SqlParameter[] values)
{
SqlCommand cmd = new SqlCommand(sql, Connection);
cmd.Parameters.AddRange(values);
return cmd.ExecuteNonQuery();
}

public static int GetScalar(string safeSql)
{
SqlCommand cmd = new SqlCommand(safeSql, Connection);
int result = Convert.ToInt32(cmd.ExecuteScalar());
return result;
}



...全文
395 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
宝_爸 2013-10-08
  • 打赏
  • 举报
回复
类似下面这样,不需要自己写个static Connection. ADO.net的Connection有连接池的,connection创建时先从链接池中找connection string一样的Connection对象。 public static int ExecuteCommand(string safeSql) { using (Connection con = new Connection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString)) { SqlCommand cmd = new SqlCommand(safeSql, con); int result = cmd.ExecuteNonQuery(); return result; } }
che2piaopiao 2013-10-08
  • 打赏
  • 举报
回复
引用 2 楼 tcmakebest 的回复:
不要共用 connection,需要用的时候就 new 一个。 不要一早就打开 connection,需要打开的时候才打开,及时并且要确保 finally {关闭}。
能否写个例子我看看
bdmh 2013-10-08
  • 打赏
  • 举报
回复
搞那么多 connection.Open 干嘛,保证只有一个地方open
金色海洋 2013-10-08
  • 打赏
  • 举报
回复
习惯不对,连接那能一直open呀。用的时候在open,用完了立刻close
tcmakebest 2013-10-08
  • 打赏
  • 举报
回复
不要共用 connection,需要用的时候就 new 一个。 不要一早就打开 connection,需要打开的时候才打开,及时并且要确保 finally {关闭}。
QQlvbo 2013-10-08
  • 打赏
  • 举报
回复
建议楼主使用using(SqlConnection conn = new SqlConnection)这样在using结束时就会自动关闭当前的数据库连接了。

62,244

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧