Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/274.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/31.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ASP.net为什么不执行这些查询?_C#_Asp.net_Sql Server - Fatal编程技术网

C# ASP.net为什么不执行这些查询?

C# ASP.net为什么不执行这些查询?,c#,asp.net,sql-server,C#,Asp.net,Sql Server,在我的代码中,这两个查询似乎都没有运行。调试标签打印为“结束”,因此它在代码块内执行某些操作,只是看起来它不喜欢查询 // Check input is all valid if (Page.IsValid) { debug.Text = "begin"; using (SqlConnection cn = new SqlConnection( ConfigurationManager.ConnectionStrings["LocalSqlServer"].ToS

在我的代码中,这两个查询似乎都没有运行。调试标签打印为“结束”,因此它在代码块内执行某些操作,只是看起来它不喜欢查询

// Check input is all valid
if (Page.IsValid)
{
    debug.Text = "begin";

    using (SqlConnection cn = new SqlConnection(
       ConfigurationManager.ConnectionStrings["LocalSqlServer"].ToString()))
    {

        // Verify that username is unique
        using (SqlCommand cmd = new SqlCommand(
           "UPDATE tblSiteSettings SET isActive = 0", cn))
        {
            cn.Open();
            cn.Close();
        }

        using (SqlCommand cmd = new SqlCommand(
           "INSERT INTO tblSiteSettings (allowProductRatings, allowComments, " + 
           "siteName, settingDate, isActive) VALUES (@allowRatings, " +
           "@allowcomments, @siteName, getDate(), 1)", cn))
        {
            cmd.Parameters.Add("@allowRatings", SqlDbType.Bit).Value = 1;
            cmd.Parameters.Add("@allowcomments", SqlDbType.Bit).Value = 1;
            cmd.Parameters.Add("@siteName", SqlDbType.VarChar, 128).Value = "lol";
            cn.Open();
            cn.Close();
        }
        debug.Text = "end";
    }   
}
有几个问题:

  • 他们为什么不执行
  • 在用于插入、更新和删除的经典ASP中,我会像使用记录集一样使用con.Execute(query),我在这里运行的update语句是否正确
  • 我的查询设计好吗,还是应该以不同的方式执行它们
  • 你的名字不见了

    cmd.ExecuteScalar();
    
    您也可以重用
    SqlConnection
    ,您可以在
    之后立即使用(SqlConnection cn=new Sql…
    语句。当
    SqlConnection
    处于使用块中时,您不必关闭连接,这与当您离开
    使用块时连接已关闭有关。

    您的连接缺失

    cmd.ExecuteScalar();
    

    您也可以重用
    SqlConnection
    ,您可以在
    之后立即使用(SqlConnection cn=new Sql…
    语句。当
    SqlConnection
    处于使用块中时,您不必关闭连接,因为当您离开
    使用块时,连接已关闭。

    它不做任何事情的原因是因为您没有实际执行查询。您需要o是:

    // Verify that username is unique
    using (SqlCommand cmd = new SqlCommand("UPDATE tblSiteSettings SET isActive = 0", cn))
    {
        cn.Open();
        cmd.ExecuteNonQuery();
        cn.Close();
    }
    
    using (SqlCommand cmd = new SqlCommand("INSERT INTO tblSiteSettings (allowProductRatings, allowComments, siteName, settingDate, isActive) VALUES (@allowRatings, @allowcomments, @siteName, getDate(), 1)", cn))
    {
        cmd.Parameters.Add("@allowRatings", SqlDbType.Bit).Value = 1;
        cmd.Parameters.Add("@allowcomments", SqlDbType.Bit).Value = 1;
        cmd.Parameters.Add("@siteName", SqlDbType.VarChar, 128).Value = "lol";
        cn.Open();
        cmd.ExecuteNonQuery();
        cn.Close();
    }
    
    您缺少的是
    cmd.executeOneQuery();
    行。
    SqlCommand
    类公开了各种不同的
    Execute
    方法,最常用的是:

    • :执行查询,但不返回查询结果(但会将受影响的行作为其返回值返回)
    • :执行查询并返回第一行第一列中的值
    • :执行查询并将数据返回给SqlDataReader

    它没有做任何事情的原因是因为您没有实际执行查询。您需要做的是:

    // Verify that username is unique
    using (SqlCommand cmd = new SqlCommand("UPDATE tblSiteSettings SET isActive = 0", cn))
    {
        cn.Open();
        cmd.ExecuteNonQuery();
        cn.Close();
    }
    
    using (SqlCommand cmd = new SqlCommand("INSERT INTO tblSiteSettings (allowProductRatings, allowComments, siteName, settingDate, isActive) VALUES (@allowRatings, @allowcomments, @siteName, getDate(), 1)", cn))
    {
        cmd.Parameters.Add("@allowRatings", SqlDbType.Bit).Value = 1;
        cmd.Parameters.Add("@allowcomments", SqlDbType.Bit).Value = 1;
        cmd.Parameters.Add("@siteName", SqlDbType.VarChar, 128).Value = "lol";
        cn.Open();
        cmd.ExecuteNonQuery();
        cn.Close();
    }
    
    您缺少的是
    cmd.executeOneQuery();
    行。
    SqlCommand
    类公开了各种不同的
    Execute
    方法,最常用的是:

    • :执行查询,但不返回查询结果(但会将受影响的行作为其返回值返回)
    • :执行查询并返回第一行第一列中的值
    • :执行查询并将数据返回给SqlDataReader

    谢谢,另一个答案中建议的ExecuteOnQuery和ExecuteScalar之间有什么区别?@Tom-我在大约10秒前为你扩展了它=)以及相关的MSDN链接,以保存将答案复制并粘贴到MSDN,这样你就可以在那里获得完整的详细信息=)ExecuteScalar用于从SELECT返回单个值作为对象。ExecuteOnQuery返回一个int来表示受影响的行。所有这些都在链接中进行了解释……谢谢,正如另一个答案中所建议的那样,ExecuteOnQuery和ExecuteScalar之间有什么区别?@Tom-我在大约10秒前为您扩展了它=)与相关的MSDN链接一起保存,使答案成为MSDN的副本和粘贴,以便您可以在那里获得完整的详细信息=)ExecuteScalar用于从选择对象返回单个值。ExecuteOnQuery返回一个int来表示受影响的行。链接中解释了所有内容…两个查询似乎都不打算返回值,因此在本例中,ExecuteOnQuery将是更好的选择,如果没有其他方法可以让将来必须查看或修改代码的人更清楚地了解代码的意图=)+1感谢您的回答,我意识到我现在不需要为每个查询打开连接,此外,即使垃圾收集会处理连接,关闭连接是否更好?我总是喜欢保证我自己做,而不依赖垃圾。@Tom-
    using(){}
    构造在功能上与try/catch/finally相同,它确保
    Dispose()
    被调用到
    using
    块中放置的对象上,它比我或你可靠得多;=)这两个查询似乎都不打算返回值,因此在本例中,ExecuteOnQuery将是更好的选择,如果没有其他方法可以让将来必须检查或修改代码的人更清楚地了解代码的意图=)+1感谢您的回答,我意识到我现在不需要为每个查询打开连接,此外,即使垃圾收集会处理连接,关闭连接是否更好?我总是喜欢保证我自己做,而不依赖垃圾。@Tom-
    using(){}
    构造在功能上与try/catch/finally相同,它确保
    Dispose()
    被调用到
    using
    块中放置的对象上,它比我或你可靠得多;=)