我正在构建一个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(查询);所以我可以在运行之前看到格式化的查询,它看起来格式正确。
有什么想法吗?
答案 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;
现在工作正常!