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

时间:2014-11-10 05:07:26

标签: 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字段的人。

我稍后会为标题,名字,姓氏等添加更多文本框,并且需要一个可以填充或未填写的任何字段组合的解决方案。

感谢。

2 个答案:

答案 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)

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

  1. 动态构建字符串
  2. 这样的事情:

    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));
    

    依此类推......

    1. 动态检查查询中的空白
    2. 这样的事情:

      string query = "SELECT * FROM message WHERE (LEN(@PatientMob) = 0 OR phone_number LIKE @PatientMob) and (LEN(@UserID) = 0 OR user_ID LIKE @UserID)", conn);
      
      1. 我看到你正在使用LIKE,而且我确实不是MySQL的一个,所以这可能会有所不同,但似乎你可以用任何字符指定一个参数来包装你的参数通配符。在T-SQL中,它看起来像column LIKE '%' + @param + '%'。当然,这不是一个完全匹配,但听起来它可能是你正在寻找的。如果是空搜索框,则会产生column LIKE '%%',这将匹配任何值。