我对 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 字段中输入任何内容的人。
稍后我将添加更多文本框,用于标题、名字、姓氏等,并且需要一个能够处理已填写或未填写字段的任意组合的解决方案。
谢谢。
最佳答案
不幸的是,我不知道有什么好方法可以做到这一点,但您确实有一些选择。
- 动态构建字符串
类似这样的事情:
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 + '%'
。当然,这不会是完全匹配的,但这听起来可能就是您正在寻找的。如果搜索框为空,则只会生成LIKE '%%' 列
,它将匹配任何值。
关于c# - 从多个文本框中选择查询c#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26837125/