【问题标题】:Select statement with textboxes and checkboxes in c#在 C# 中选择带有文本框和复选框的语句
【发布时间】:2017-06-27 16:58:17
【问题描述】:

我正在尝试构建一个查询,允许我同时通过文本框和复选框进行搜索,但每次都得到返回值无记录并且无法确定原因。

con.Open();

string str = "Select * from engineering where Education = @Education AND JobNumber like '%' + @search + '%'  ";

SqlCommand xp = new SqlCommand(str.ToString(), con);

xp.Parameters.Add("@search", SqlDbType.NVarChar).Value = txtProjectNumber.Text;
xp.Parameters.Add("@Education", SqlDbType.Int).Value = chkEducational.CheckState;

try 
{
    da = new SqlDataAdapter();
    da.SelectCommand = xp;
    da.Fill(ss);
    Showdata(pos);
    DataSet ds = new DataSet();
    da.Fill(ds, "ss");
    dataGridView1.DataSource = ds.Tables["ss"];
} 
catch 
{
    MessageBox.Show("No Record Found");
}

con.Close();

上面是我的搜索按钮的代码。无需担心 Showdata(pos),因为它只是用来滚动返回的结果。如果我取出 Education = @Education 或 JobNumber = '%' + @search1 + '%' ,查询将起作用,只是由于某种原因不在一起。对此的任何帮助将不胜感激。

【问题讨论】:

  • 听起来您在问我们为什么在您的表中没有任何记录(我们从未见过)其中我们无法猜测的某些列的内容等于某个值你保守了一个严密的秘密,并且其他一些神秘的专栏与其他一些只有你和 NSA 知道的值相匹配。答案是,找出@Education@search 中的实际情况,以及这些列中的值。
  • 这是一个问题:这个表达式一直返回 false:stuff.Any(f) 你能告诉我我的代码中的问题在哪里吗?或者它可能在我的数据库中,除非我从网络服务中获取数据(我忘记了)。谢谢!
  • 在数据库端,jobnumber 是 varchar,Education 是 int(1 表示选中,0 表示未选中)。因此,如果我只选中复选框并将文本框留空,我希望返回数据库中该字段中具有 1 的所有记录,但是如果我要在该文本字段中键入一个数字并选中复选框,我想要返回已选中该特定作业编号和复选框的记录。
  • 您是否直接在 SQL 环境中测试过该 SQL?如果它与一个参数 另一个一起工作,则很可能没有任何记录两者都为真。
  • 是的,我已经在 Microsoft SQL Server Management Studio 中运行了查询并获得了我正在寻找的记录。此外,即使我只是在文本框中输入工作编号而不选中复选框,我也没有找到任何记录。我无法使用此查询检索任何记录。

标签: c# sql


【解决方案1】:
string str = "Select * from engineering where Education = @Education AND JobNumber like @search";    
SqlCommand xp = new SqlCommand(str.ToString(), con);      
xp.Parameters.Add("@search", SqlDbType.NVarChar).Value = "%" + txtProjectNumber.Text + "%";

【讨论】:

  • 执行的时候还是提示没有找到记录。
【解决方案2】:

我已经找到了我想要发生的事情的答案,我用文本框参数正常编写了查询,并添加了一个 if 语句,如果复选框被选中,则添加到 where 子句中。

这是我所说的一个例子:

con.Open();


        string str = "select * from engineering where JobNumber like '%' + @search + '%' ";
if(chkEducational.Checked)
str += "AND Education = @Education";

SqlCommand xp = new SqlCommand(str.ToString(), con);


 xp.Parameters.Add("@search", SqlDbType.NVarChar).Value =  txtProjectNumber.Text;
xp.Parameters.Add("@Education", SqlDbType.Int).Value = chkEducational.CheckState;



try
        {


            da = new SqlDataAdapter();
            da.SelectCommand = xp;
            da.Fill(ss);
            Showdata(pos);
            DataSet ds = new DataSet();
            da.Fill(ds, "ss");
            dataGridView1.DataSource = ds.Tables["ss"];

        }
        catch
        {
            MessageBox.Show("No Record Found");

        }





        con.Close();

感谢那些花时间回答我问题的人。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-09-30
    • 1970-01-01
    • 2023-04-02
    • 1970-01-01
    • 2017-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多