gpt4 book ai didi

c# - 使用 3 个文本框过滤数据库结果

转载 作者:行者123 更新时间:2023-12-01 22:17:40 31 4
gpt4 key购买 nike

我正在编写一个程序,用户可以通过 3 个文本框过滤数据库中的结果,但是,结果没有被正确过滤,因为如果一个框留空,它不会显示任何内容

private void textBox1_TextChanged(object sender, EventArgs e)
{
con = new SQLiteConnection(cs);
con.Open();

if ((textBox2.Text==""||textBox.Text3=="")&&textBox1.Text!="")
{
adapt = new SQLiteAdapter("select data1, data2 from DataTable where data1 like '" + textBox1.Text + "%'", con);
dt = new DataTable();
adapt.Fill(dt);
dataGridView1.Source = dt;
}
else if(textBox1.Text !="")
{
adapt = new SQLiteAdapter("select data1, data2 from DataTable where data1 like '" + textBox1.Text + "%' and data2 like '" + textBox2.Text + "%' and substr(data2,-2) like '" + textBox3.Text +"'", con);
dt = new DataTable();
adapt.Fill(dt);
dataGridView1.Source = dt;

}
con.close();
}

这是我在其中一个文本框上使用的代码,对于其他两个文本框,它看起来几乎相同,只是我更改了 if 子句条件。我是否必须为每个文本框编写 9 个不同的子句,以便涵盖所有选项?有没有正确的方法?

最佳答案

我将参数化查询以防止 SQL 注入(inject),并使用 IFNULL 函数来帮助您。这样您就可以通过一个查询来涵盖所有场景。如果任何文本框为空,则该项目的 LIKE 子句基本上不会过滤掉任何内容:

string qry = @"SELECT 
data1,
data2
FROM DataTable
WHERE
data1 LIKE IFNULL(@data1, data1) AND
data2 LIKE IFNULL(@data2, data2) AND
SUBSTR(data2, -2) LIKE IFNULL(@data3, data3)";

要创建获取文本框值的参数,如果文本框为空,则将参数值设置为 null。对所有 3 个文本框执行此操作:

string data1 = null;
if(!string.IsNullOrWhiteSpace(textbox1.Text))
{
data1 = textbox1.Text + "%";
}

SqlLiteCommand cmd = new SqlLiteCommand(qry, con);
SqlLiteParameter parData1 = new SqlLiteParameter("@data1", (object)data1 ?? DBNull.Value);
cmd.Parameters.Add(parData1);

现在您可以执行该命令。

关于c# - 使用 3 个文本框过滤数据库结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43830910/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com