回答

收藏

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()。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则