我仍然对c#和SQL都很新,所以请记住这一点。我搜索了网站,但无法找到答案。
我正在C#中构建一个基本的ASP Web表单,它连接到一个mysql数据库并用结果填充gridview。
我在网页上有两个文本框:电话号码和用户ID。 然后我有一个按钮,当点击它时运行以下代码:
protected void btnSubmit_Click(object sender, EventArgs e)
{
{
try
{
conn.Open();
//SQL
MySqlCommand cmd = new MySqlCommand("Select * from message where phone_number like @PatientMob and user_ID like @UserID, conn);
//Paramaters
cmd.Parameters.Add(new MySqlParameter(@"PatientMob", MySqlDbType.VarChar)).Value = PatientMobile.Text;
cmd.Parameters.Add(new MySqlParameter(@"UserID", MySqlDbType.VarChar)).Value = UserID.Text;
MySqlDataAdapter adp = new MySqlDataAdapter(cmd);
DataSet ds = new DataSet();
adp.Fill(ds);
gridview.DataSource = ds;
...等
我的问题是,即使只填写了一个文本框,如何格式化查询以使其正常工作? 目前,如果我输入电话号码但未输入用户ID,则结果显示具有该电话号码但未输入用户ID字段的人。
我稍后会为标题,名字,姓氏等添加更多文本框,并且需要一个可以填充或未填写的任何字段组合的解决方案。
感谢。
答案 0 :(得分:0)
我将自己格式化sql where string。比如代码
if (!string.IsNullOrEmpty(Phone.Text))
{
whereCriteria += " phone like @Phone";
cmd.Parameters.Add(new MySqlParameter(@"phone", MySqlDbType.VarChar)).Value = Phone.Text;
}
答案 1 :(得分:0)
不幸的是,我不知道有什么好方法可以做到这一点,但你确实有一些选择。
这样的事情:
List<string> wheres = new List<string>();
List<MySqlParameter> parameters = new List<MySqlParameter>();
if (!string.IsNullOrWhiteSpace(PatientMobile.Text))
{
wheres.Add("phone_number LIKE @PatientMob");
parameters.Add(new MySqlParameter(@"PatientMob", MySqlDbType.VarChar)
{
Value = PatientMobile.Text
});
}
...
string query = string.Format("SELECT * FROM Messages WHERE {0}", string.Join(" AND ", wheres));
依此类推......
这样的事情:
string query = "SELECT * FROM message WHERE (LEN(@PatientMob) = 0 OR phone_number LIKE @PatientMob) and (LEN(@UserID) = 0 OR user_ID LIKE @UserID)", conn);
LIKE
,而且我确实不是MySQL的一个,所以这可能会有所不同,但似乎你可以用任何字符指定一个参数来包装你的参数通配符。在T-SQL中,它看起来像column LIKE '%' + @param + '%'
。当然,这不是一个完全匹配,但听起来它可能是你正在寻找的。如果是空搜索框,则会产生column LIKE '%%'
,这将匹配任何值。