ASP.net为什么这些查询没有执行?

时间:2010-08-23 08:47:13

标签: c# asp.net sql-server

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

// 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";
    }   
}

几个问题:

  1. 他们为什么不执行?
  2. 在经典ASP中,对于插入,更新和删除,我会使用con.Execute(query)假设使用记录集,我是否在这里正确运行更新语句?
  3. 我的查询设计是否合适,或者我应该以不同的方式执行它们?

2 个答案:

答案 0 :(得分:3)

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

// 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.ExecuteNoneQuery();Execute类公开了各种不同的SqlCommand方法,最常用的是:

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

答案 1 :(得分:2)

你遗失了

cmd.ExecuteScalar();

您也可以重复使用SqlConnection,您可以在using (SqlConnection cn = new Sql...语句后立即打开连接。当SqlConnection位于使用区块中时,您不必关闭连接,根据the documentation,当您离开using区块时,连接已关闭。