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

标签 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. 我的查询设计是否良好,或者我应该以不同的方式执行它们?

最佳答案

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

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

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

关于c# - ASP.net 为什么这些查询没有执行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3545957/

相关文章:

c# - 使用 IPrincipal 集对 ASP.net Web API 进行单元测试

c# - 在 .cshtml 页面中发送和接收数据

SQL 计算未知列数中的空单元格

sql - 在不使用 MAX、AVG 等聚合函数的情况下,将行转换为 SQL 中的列

c# - 什么是独立协会和外键协会?

c# - 使用 ASP.NET MVC Core 将数据从数据库注入(inject)到类中

c# - 如何在 C# 中使用 lambda 表达式使用数组进行比较

c# - 日期时间转换和解析

c# - 从 ASP.NET 中的 POST 方法检索数据

SQL CASE WHEN <Value> IN 在 SQL Server 2005 上运行缓慢,但在 2000 上则不然