【问题标题】:MySql Query - Select Where, Alias & parameterMySql 查询 - 选择位置、别名和参数
【发布时间】:2011-04-24 09:48:39
【问题描述】:

我在使用别名和参数的 MySQL Select Where 语句时遇到了一些问题。我的问题在于语句的 Where 部分。就目前而言,当我尝试使用任何参数时,我不会返回任何结果。

有问题的陈述是:

SELECT postcode, suburb, streetname, categorycode, DATE_FORMAT(dateRecorded, '%d/%m/%Y') AS Expr1, DATE_FORMAT(dateLastModified, '%d/%m/%Y') AS Expr2, status FROM incidentdetails WHERE (postcode = @postcode) AND (suburb = @suburb) AND (categorycode = @categorycode) AND (status = @status)

使用正确的参数执行此查询会返回正确的列,但没有数据。

完全删除 where 子句,我得到了预期的完整表。

将 where 子句从 WHERE (postcode = @postcode) AND (suburb = @suburb) AND (categorycode = @categorycode) AND (status = @status) 更改为 WHERE (postcode = 4020)确实有效 - 正如预期的那样。

将 WHERE 子句替换为 (postcode = @postcode) 并传递参数(如下所示)不起作用。

sqlFillRelated.Parameters.AddWithValue("@postcode", int.Parse(PostcodeTxtBox.Text.ToString()))

从服务器资源管理器 SQL 命令运行时,完整的查询(带参数)可以成功运行。

        string sqlFILL = "SELECT postcode, suburb, streetname, categorycode, DATE_FORMAT(dateRecorded, '%d/%m/%Y') AS Expr1, DATE_FORMAT(dateLastModified, '%d/%m/%Y') AS Expr2, status FROM incidentdetails WHERE (postcode = @postcode) AND (suburb = @suburb) AND (categorycode = @categorycode) AND (status = @status)";
    string sql = "SELECT COUNT(*) FROM incidentdetails WHERE (postcode = @postcode) AND (suburb = @suburb) AND (categorycode = @categorycode) AND (status = @status)";
    MySqlConnection mycon = new MySqlConnection(sqlconnection);
    mycon.Open();
    MySqlCommand selectRelatedCmd = new MySqlCommand(sql, mycon);
    MySqlCommand sqlFillRelated = new MySqlCommand(sqlFILL, mycon);
    int matches = 0;
    selectRelatedCmd.Parameters.AddWithValue("@postcode", int.Parse(PostcodeTxtBox.Text.ToString()));
    selectRelatedCmd.Parameters.AddWithValue("@suburb", SuburbTxtBox.Text.ToString());
    selectRelatedCmd.Parameters.AddWithValue("@categorycode",IncidentTypeDropList.Text.ToString());
    selectRelatedCmd.Parameters.AddWithValue("@status", "Open");
    sqlFillRelated.Parameters.AddWithValue("@postcode", int.Parse(PostcodeTxtBox.Text.ToString()));
    sqlFillRelated.Parameters.AddWithValue("@suburb", SuburbTxtBox.Text.ToString());
    sqlFillRelated.Parameters.AddWithValue("@categorycode", IncidentTypeDropList.Text.ToString());
    sqlFillRelated.Parameters.AddWithValue("@status", "Open");

    matches = int.Parse(selectRelatedCmd.ExecuteScalar().ToString());
    if (matches == 0)
    {
        matchingIncidentPanel.Visible = false;  
    }
    else if (matches >= 1)
    {
        matchingIncidentPanel.Visible = true;
    }

    MySqlDataAdapter da = new MySqlDataAdapter(sqlFILL, mycon);
    DataTable table = new DataTable();
    table.Locale = System.Globalization.CultureInfo.InvariantCulture;
    da.Fill(table);
    g.DataSource = table;
    g.DataBind();

    mycon.Close();

【问题讨论】:

  • 我认为您还应该为访问 MySQL 的语言添加标签。

标签: c# mysql alias where-clause


【解决方案1】:

好的,这是一个很长的镜头,因为我不确定您使用的是什么语言(是 C# 吗?),但让我感到奇怪的是,您在设置参数时使用了 @。

通常,您使用一些魔术字符来表示 SQL 查询中的参数,但是当您以编程方式设置它时,您会省略该字符。

你试过了吗

sqlFillRelated.Parameters.AddWithValue("status", "Open")

而不是

sqlFillRelated.Parameters.AddWithValue("@status", "Open")

?

【讨论】:

  • 我正在使用 C#,开发一个以 MySql 作为数据库的 ASP 应用程序。 @ 表示 Mysql 查询的参数,并且 AddWithValue 方法重载为 (string ParameterName, object value),据我所知,参数名称需要有 @ (它在我的其他查询中工作——而且我相信 mysql 确实支持命名查询吗?)。
【解决方案2】:

它是 C#。去掉 C# 代码中参数的“@”前缀。

【讨论】:

  • 啊。它确实有效,感谢你们俩!我是从哪里获得 @ 命名约定的?
  • 从 MySQL 脚本约定,多种 SQL 存储过程约定,应有尽有。 别难过! 很痛苦 @ char 破坏了东西,我花了 2 天时间才弄明白,几年前我做了 同样的事情而你'就像我在同一问题上看到的第 10 个其他人一样。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-01-06
  • 2017-10-02
  • 2021-04-02
  • 2012-04-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多