参数" @ Name"没有在集合中找到

时间:2014-05-15 04:57:03

标签: c# mysql linq parameters

我最近遇到过这个解决方案,这是我尝试从多个表中选择三个字段的变量或空输入时遇到的另一个问题的一部分。 Here is the original post.

不幸的是,我仍然对ADO.NET有点不熟悉,当我运行代码时出现此错误:

Parameter "@AreaName" not found in the collection

以下是查询的代码:

mySqlConnect.Open();

mySqlCommand = mySqlConnect.CreateCommand();
mySqlCommand.CommandText = "SELECT * FROM PlantAreaCodes WHERE (@AreaCode IS NULL OR AreaCode LIKE " + PModel.AreaCode + " OR @AreaName IS NULL OR LIKE " + PModel.AreaName + " OR @Comments IS NULL OR Comments LIKE " + PModel.Comments + ";";
mySqlCommand.Parameters["@AreaCode"].Value = (string.IsNullOrEmpty(Convert.ToString(PModel.AreaCode)) ? (object)DBNull.Value : PModel.AreaCode);
mySqlCommand.Parameters["@AreaName"].Value = (string.IsNullOrEmpty(PModel.AreaName) ? (object)DBNull.Value : PModel.AreaName);
mySqlCommand.Parameters["@Comments"].Value = (string.IsNullOrEmpty(PModel.Comments) ? (object)DBNull.Value : PModel.Comments);
mySqlReader = mySqlCommand.ExecuteReader();

传入的值是:

PModel.AreaCode = 110;
AreaName = null;
Comments = null;

我之前已经完成了这个,但不幸的是我最近遗失了一部分代码并且不得不重建。

2 个答案:

答案 0 :(得分:1)

您需要在指定值之前添加参数:

mySqlCommand.Parameters.Add("@AreaName", SqlDbType.VarChar);

mySqlCommand.Parameters["@AreaName"].Value =
    (string.IsNullOrEmpty(Convert.ToString(PModel.AreaName))
        ? (object)DBNull.Value : PModel.AreaName));

考虑使用这种替代语法:

mySqlCommand.Parameters.AddWithValue("@AreaName",
    (string.IsNullOrEmpty(Convert.ToString(PModel.AreaName))
        ? (object)DBNull.Value : PModel.AreaName));

您可以在MSDN的SqlCommand.Parameters Property页面上找到每个例子的简短示例。


此外,您已经使用查询字符串做了一些时髦的事情。这应该解决它:

mySqlCommand.CommandText =
    "SELECT * FROM PlantAreaCodes WHERE (AreaCode IS NULL OR AreaCode LIKE @AreaCode OR AreaName IS NULL OR AreaName LIKE @AreaName OR Comments IS NULL OR Comments LIKE @Comment;";

要让LIKE正常工作,您可能需要在添加参数值时添加%符号:

var areaName = (string.IsNullOrEmpty(Convert.ToString(PModel.AreaName))
                   ? (object)DBNull.Value : PModel.AreaName)

mySqlCommand.Parameters.AddWithValue("@AreaName", "%" + areaName + "%");

答案 1 :(得分:1)

您是否添加了参数?看起来你只是想设置值?

试试这个。

mySqlCommand.Parameters.AddWithValue("@AreaCode", PModel.AreaCode == 0 ? (object)DBNull.Value : PModel.AreaCode.ToString());

您还需要调整SQL文本。

mySqlCommand.CommandText = "SELECT * FROM PlantAreaCodes WHERE (@AreaCode IS NULL OR AreaCode LIKE AreaCode) AND (@AreaName IS NULL OR LIKE @AreaName) AND (@Comments IS NULL OR Comments LIKE @Comments);";