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

时间:2014-11-13 22:11:42

标签: c# mysql asp.net winforms

我正在构建一个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(查询);所以我可以在运行之前看到格式化的查询,它看起来格式正确。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

我明白了。现在我看着它,显得非常明显。 我需要在创建查询字符串之后添加参数,如下所示:

 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;

现在工作正常!