ExecuteNonQuery需要开放和可用的连接。当前连接状态为关闭
技术问答
260 人阅读
|
0 人回复
|
2023-09-14
|
ExecuteNonQuery需要一个开放和可用的连接。当前连接状态为关闭。7 O& y# y+ ~, j9 x% w% n; p( s
我在这里做错了什么?假设可以重用连接?
( r3 N% l. B: x7 Y谢谢你的帮助!. [ J6 n/ @0 {$ W
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 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 - "; ! _% n* j2 p/ }, ^, E: G+ U( y
解决方案:
* k- t5 M! ^9 f& M! S 你的问题是:
" }: H- B- f u& x7 W" c0 dSqlDataReader rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection);cmd.ExecuteReader()如果要在摆脱连接之前再次使用连接,应该打电话。如果你想知道CommandBehaviour.CloseConnection所以零件的功能/含义,SqlCommand.ExecuteReader文档是个不错的选择。有文档告诉你CommandBehaviour枚举的所有可能值是什么?CommandBehaviour.CloseConnection执行以下操作:6 d; E( L) q$ Q) b% Q! J
执行命令时,如果关闭关联DataReader对象关闭关联Connection对象。
! x) C! [% ?/ o0 F4 ^如果您不需要特别指定CommandBehaviour,则可以指定CommandBehaviour.Default或者根本不指定一个。CommandBehaviour.Default是: a1 ]5 n/ k& M; E
查询可以返回多个结果集。执行查询可能会影响数据库的状态。Default没有设置CommandBehavior所以调用标志ExecuteReader(CommandBehavior.Default)功能等效调用ExecuteReader()。 |
|
|
|
|
|