ASP.NET数据库搜索

时间:2016-03-01 10:52:19

标签: c# asp.net sql-server

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

我写的查询仅在我以与DB中相同的方式拼写名称时返回结果,例如如果我搜索“companyname”它找不到任何东西,但“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();

3 个答案:

答案 0 :(得分:2)

更改此行:

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

没有子查询。

答案 1 :(得分:1)

尝试将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;

答案 2 :(得分:0)

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