ASP.NET 数据库搜索

本文关键字:搜索 数据库 NET ASP | 更新日期: 2023-09-27 18:36:56

我正在尝试在我的 Web 应用程序上创建一个搜索框,在我的数据库中按公司名称进行搜索,并将结果绑定到 GridView。数据库中的一些名称是大写的,有些是小写的,有些是混合的。

我编写的查询仅当我以与数据库中相同的方式拼写名称时才返回结果,例如,如果我搜索"公司名称",它不会找到任何内容,但"COMPANYNAME"会。

string find = "select idKorisnik, Korisnik_naziv, Pravni_oblik, Web from tblKorisnici where (Korisnik_naziv like '%' + @find +'%' )";
string CS = ConfigurationManager.ConnectionStrings["CRMdbConnectionString"].ConnectionString;
SqlConnection con = new SqlConnection(CS);
SqlCommand cmd = new SqlCommand(find, con);
cmd.Parameters.Add("@find", SqlDbType.NVarChar).Value = txtSearch.Text;
con.Open();
cmd.ExecuteNonQuery();
SqlDataAdapter da = new SqlDataAdapter();
da.SelectCommand = cmd;
DataSet ds = new DataSet();
da.Fill(ds, "Korisnici_naziv");
GridView2.DataSource = ds;
GridView2.DataBind();
con.Close();

ASP.NET 数据库搜索

更改此行:

string find = "select idKorisnik, Korisnik_naziv, Pravni_oblik, Web from tblKorisnici where Korisnik_naziv COLLATE Croatian_100_CI_AI like '%' + @find +'%' ";

没有子查询。

尝试将COLLATE添加到要筛选的列中,以便 SQL Server 执行不区分大小写的排序规则,如 Croatian_100_CI_AI

SELECT idKorisnik, Korisnik_naziv, Pravni_oblik, Web
FROM
(
  SELECT
    idKorisnik, 
    Korisnik_naziv COLLATE Croatian_100_CI_AI AS Korisnik_naziv,
    Pravni_oblik, 
    Web
  FROM tblKorisnici
)
WHERE Korisnik_naziv LIKE '%' + @find +'%';

或者没有派生表,按照 Rusian K 的答案:

SELECT idKorisnik, Korisnik_naziv, Pravni_oblik, Web
FROM tblKorisnici
WHERE Korisnik_naziv LIKE '%' + @find +'%' COLLATE Croatian_100_CI_AI;

您可以将两者(sql 数据和文本框输入)设置为小写或大写。对于查询中的SQL数据,您可以使用"UCASE()或UPPER()",对于texbox,您可以执行以下操作txtSearxh.Text.ToUpper()。