【问题标题】:How to troubleshooting a MySQL fatal error? C# front end如何解决 MySQL 致命错误? C#前端
【发布时间】:2015-01-11 05:17:04
【问题描述】:

我正在构建一个 Web 表单,以便能够使用 select 语句在 mysql 数据库中进行搜索。

我有两个文本框——“UserID”和“PatientMobile”以及一个提交按钮。当按下提交按钮时,会执行以下代码:

    protected void submit_Click(object sender, EventArgs e)
    {
        {

            try
            {
                List<string> wheres = new List<string>();
                List<MySqlParameter> parameters = new List<MySqlParameter>();

                if (!string.IsNullOrWhiteSpace(PatientMobile.Text))
                {
                    wheres.Add("PHONE_NUMBER = @PatientMob");
                    parameters.Add(new MySqlParameter("@PatientMob", MySqlDbType.VarChar)
                    {
                        Value = PatientMobile.Text
                    });
                }

                if (!string.IsNullOrWhiteSpace(UserID.Text))
                {
                    wheres.Add("USER_ID = @UserID");
                    parameters.Add(new MySqlParameter("@UserID", MySqlDbType.VarChar)
                    {
                        Value = UserID.Text
                    });
                }


                string query = string.Format("SELECT * FROM MESSAGE WHERE {0}", string.Join(" AND ", wheres));
                conn.Open();
                MySqlCommand cmd = new MySqlCommand(query, conn);

                MySqlDataAdapter adp = new MySqlDataAdapter(cmd);
                DataSet ds = new DataSet();
                adp.Fill(ds);
                grvCustomers.DataSource = ds;
                grvCustomers.DataBind();
                lbltotalcount.Text = grvCustomers.Rows.Count.ToString();

            }
            catch (MySqlException ex)
            {
                ShowMessage(ex.Message);
            }
            finally
            {
                conn.Close();

            }
        }


    }

对我来说一切都很好,但是当我运行它时,我收到了一个致命错误。

如果我替换:

if (!string.IsNullOrWhiteSpace(PatientMobile.Text))
                {
                    wheres.Add("PHONE_NUMBER = @PatientMob");

if (!string.IsNullOrWhiteSpace(PatientMobile.Text))
                {
                    wheres.Add("PHONE_NUMBER = 12345");

运行良好。仅当查询包含@PatientMob 时,它似乎不起作用。

我在wireshark 中对此进行了调查,似乎它甚至没有将select 语句传递给mysql 服务器。如果我删除参数并将其替换为文本值(如上),它会出现在 Wireshark 中并正确检索结果。

我添加了一个 MessageBox.Show(query);所以我可以在运行之前看到格式化的查询,并且它的格式似乎正确。

有什么想法吗?

【问题讨论】:

  • 您收到什么致命错误?观察:您正在填充但没有使用您的parameters 列表。将值绑定到查询时需要使用它。
  • 我得到的唯一错误是“执行期间发生致命错误”它并没有真正提供更多细节。如果文本框不为空,则将参数添加到放置在选择查询中的“wheres”字符串中。
  • 不,参数不会添加到 wheres 字符串中。在 string query = ... 之后,我建议您使用 Console.WriteLine(query) 查看您传递给数据库的查询。由于您没有将“参数”列表传递给查询,因此不会替换 @PatientMob。要么自己执行这个替换,要么通过查询将参数传递给数据库。
  • 为什么你有一个额外的{ `protected void submit_Click(object sender, EventArgs e) { {` 看看这个 MSDN 文档以及你正在创建一个参数列表我认为你是不必要的msdn.microsoft.com/en-us/library/…
  • @DJ CRAZE 好眼力,我删除了多余的{。我有必要将这些添加到列表中,以便程序按照我的预期工作。这里有一些关于为什么这样做的历史:stackoverflow.com/questions/26837125/…

标签: c# mysql asp.net winforms


【解决方案1】:

我想通了。现在我看着它,令人眼花缭乱。 我需要在创建查询字符串后添加参数,如下所示:

 string query = string.Format("SELECT * FROM MESSAGE WHERE {0}", string.Join(" AND ", wheres));
                conn.Open();
                MySqlCommand cmd = new MySqlCommand(query, conn);
                cmd.Parameters.Add(new MySqlParameter(@"PatientMob", MySqlDbType.VarChar)).Value = PatientMobile.Text;
                cmd.Parameters.Add(new MySqlParameter(@"UserID", MySqlDbType.VarChar)).Value = UserID.Text;

现在工作正常!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-11-22
    • 1970-01-01
    • 1970-01-01
    • 2013-02-12
    • 2019-07-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多