【发布时间】: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/…