【问题标题】:SQL Parameters IssueSQL 参数问题
【发布时间】:2020-11-30 18:19:51
【问题描述】:

这似乎是我的参数名称的明显拼写错误,但我无法发现它。错误信息是:

必须声明标量变量“@SelectedDepartment”

代码:

using Microsoft.ApplicationBlocks.Data;

using (SqlConnection batConnection = new SqlConnection(batConstr))
{
    string actualsQuery = "SELECT * FROM Budget WHERE CostCenter = @SelectedDepartment AND Year = @SelectedYear";
    
    using (SqlCommand actualsCommand = new SqlCommand(actualsQuery, batConnection))
    {
        actualsCommand.CommandType = CommandType.Text;
        actualsCommand.Parameters.AddWithValue("@SelectedDepartment", budgetsActuals.SelectedDepartment);
        actualsCommand.Parameters.AddWithValue("@SelectedYear", Convert.ToInt32(budgetsActuals.SelectedYear));
    
        batConnection.Open();
        ds = SqlHelper.ExecuteDataset(batConnection, CommandType.Text, actualsQuery);
    }
}

我已经调试了代码并且可以确认数据库连接良好并且模型具有填充参数的值。我错过了什么吗?

【问题讨论】:

  • 我不熟悉SqlHelper.ExecuteDataset,但我没有看到你在调用它时使用了SqlCommand。
  • 我猜你应该将查询的参数传递给 ExecuteDataset 方法。如果我没记错的话,它应该还有一个参数。也。
  • 我们不知道SqlHelper.ExecuteDataset 做了什么。我会从它的外观假设它是一个静态函数。目前,它对您构建连接、命令等根本没有帮助。老实说,此时您可以摆脱该调用,只需使用DataAdapter 并填写DataSet。另一方面,我会在您的类(可能是Budget)中创建一个辅助函数,该函数利用SqlHelper 类进行此类调用并返回您需要的数据。此外,您的连接也应该在完成后处理掉。
  • ExecuteDataset(batConnection, CommandType.Text
  • 感谢@LasseV.Karlsen。我认为这就是问题所在。

标签: c# sql-server asp.net-mvc ado.net


【解决方案1】:

ADO.NET 的一个细微差别是,如果参数的值为null,则不添加参数(至少用于输入目的)。因此,添加时 - 您应该检查 null 并改用 DbNull.Value

【讨论】:

    【解决方案2】:

    LasseV.Karlsen 在 cmets 中是正确的;参数未传递给 ExecuteDataset(...) 方法。这对我有用:

    using (SqlConnection batConnection = new SqlConnection(batConstr))
    {
        string actualsQuery = "SELECT * FROM Budget WHERE CostCenter = 
            @SelectedDepartment AND Year = @SelectedYear";
        
        using (SqlCommand actualsCommand = new SqlCommand(actualsQuery, batConnection))
        {
            SqlParameter[] parameters = new SqlParameter[2];
            parameters[0] = new SqlParameter("@SelectedDepartment",
                budgetsActuals.SelectedDepartment);
            parameters[0].Value = budgetsActuals.SelectedDepartment;
            parameters[1] = new SqlParameter("@SelectedYear",
                budgetsActuals.SelectedYear);
            parameters[1].Value = budgetsActuals.SelectedYear;
    
            batConnection.Open();
            ds = SqlHelper.ExecuteDataset(batConstr, CommandType.Text, actualsQuery,
                parameters);
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-08
      • 1970-01-01
      相关资源
      最近更新 更多