ExecuteNonQuery需要一个开放且可用的连接.连接的当前状态已关闭.
我在这做错了什么?我假设你可以重用连接?
谢谢你的帮助!
using (SqlConnection cn = new SqlConnection(ConfigurationManager.ConnectionStrings["LocalSqlServer"].ToString()))
{
cn.Open();
// If we are reverting to an old type
if (pageAction == "revert")
{
debug.Text = "FLAG 1";
// Get the revert ID
int revertingID = int.Parse(Request.QueryString["revID"]);
bool rowsReturned = false;
debug.Text = "FLAG 2 - " + revertingID.ToString();
// Set all to 0
using (SqlCommand cmd = new SqlCommand("SELECT ID FROM tblSiteSettings WHERE ID = " + revertingID, cn))
{
// If it exists
SqlDataReader rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
if (rdr.Read())
{
rowsReturned = true;
}
rdr.Close();
}
debug.Text = "FLAG 3 - " + rowsReturned.ToString();
// Set new active and reset others
if (rowsReturned == true)
{
using (SqlCommand cmd = new SqlCommand("UPDATE tblSiteSettings SET isActive = 1 WHERE ID = " + revertingID, cn))
{
cmd.ExecuteNonQuery();
}
using (SqlCommand cmd = new SqlCommand("UPDATE tblSiteSettings SET isActive = 0 WHERE ID <> " + revertingID, cn))
{
cmd.ExecuteNonQuery();
}
}
//debug.Text = "FLAG 4 - ";
}
Run Code Online (Sandbox Code Playgroud)
Rob*_*Rob 18
你的问题是:
SqlDataReader rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
Run Code Online (Sandbox Code Playgroud)
cmd.ExecuteReader()'如果你想在"摆脱"它之前再次使用连接,你应该打电话.如果您想了解该CommandBehaviour.CloseConnection部分的功能/意味着什么,那么SqlCommand.ExecuteReader的文档是一个不错的选择.还有一些文档可以告诉您CommandBehaviour枚举的所有可能值.基本上CommandBehaviour.CloseConnection做以下事项:
执行该命令时,关闭关联的DataReader对象时将关闭关联的Connection对象.
如果您没有特别需要指定CommandBehaviour,那么要么指定CommandBehaviour.Default,要么根本不指定.CommandBehaviour.Default是:
查询可以返回多个结果集.执行查询可能会影响数据库状态.默认设置没有CommandBehavior标志,因此调用ExecuteReader(CommandBehavior.Default)在功能上等同于调用ExecuteReader().
您正在关闭连接,rdr.Close();并且在呼叫之前从不重新打开它ExecuteNonQuery().
实际上你根本不需要关闭它,如果它包含在一个using调用中,它Dispose()会自动为你关闭连接.
| 归档时间: |
|
| 查看次数: |
59585 次 |
| 最近记录: |