c# - 从多个文本框中选择查询c#

标签 c# mysql asp.net

我对 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 字段中输入任何内容的人。

稍后我将添加更多文本框,用于标题、名字、姓氏等,并且需要一个能够处理已填写或未填写字段的任意组合的解决方案。

谢谢。

最佳答案

不幸的是,我不知道有什么好方法可以做到这一点,但您确实有一些选择。

  1. 动态构建字符串

类似这样的事情:

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/

    相关文章:

    c# - UWP 应用程序尝试将本地 html 文件加载到 webview 控件

    c# - 将数据集导出到一个 excel 文件的多个 excel 表中

    php - 导入时连接列 (MySQL/phpmyadmin)

    javascript - 获取 .js 文件中的 .aspx 控件 ID

    c# - List<T> - 我传递的是对象还是引用?

    java - 在 Windows 上将 Apache Nutch 与 MySQL 集成

    java - 使用 MYSQL 和 JSP 填充 Javascript 数组

    javascript - MVC 4 和 JavaScript

    asp.net - 有没有办法在不破坏 ASP.Net 回发的情况下修改查询字符串?

    c# - “CreateIndexDescriptor”不包含 'AddMapping' 的定义