如何解决MySQL致命错误?C# 前端

本文关键字:致命错误 前端 MySQL 何解决 解决 | 更新日期: 2023-09-27 18:30:23

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

我有两个文本框 - "用户ID"和"患者移动"和一个提交按钮。按下提交按钮时,将执行以下代码:

    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中对此进行了调查,似乎它甚至没有将选择语句传递给mysql服务器。 如果我删除参数并将其替换为文本值(如上所示),它将出现在 wireshark 中并正确检索结果。

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

有什么想法吗?

如何解决MySQL致命错误?C# 前端

我想通了。现在我看得很明显。我需要在创建查询字符串后添加参数,如下所示:

 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;

现在工作正常!