2016-03-01 106 views
3

我試圖在我的web應用程序上創建一個搜索框,在我的數據庫中搜索公司名稱,並將結果綁定到GridView。數據庫中的一些名稱使用大寫字母,一些使用小寫字母,一些使用混合字體。ASP.NET數據庫搜索

我寫的查詢返回的結果只有當我用與數據庫中相同的方式拼寫名稱時才返回結果,例如,如果我搜索「公司名稱」它不會找到任何東西,但「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(); 
+2

嘗試將您的SQL更改爲'LIKE @ find'並將您的參數值更改爲'「%」+ txtSearch.Text +「%」'。 – Dai

+3

數據庫上的排序規則是否區分大小寫? –

+0

@Chris對這個特定數據庫的排序是Croatian_100_BIN –

回答

2

更改該行:

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

沒有子查詢。

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; 
+1

這解決了這個問題。感謝您的幫助。 –

0

您可以同時使(sql數據和文本框輸入)小寫或大寫。對於查詢中的SQL數據,您可以使用「UCASE()或UPPER()」,對於texbox,您可以執行以下操作txtSearxh.Text.ToUpper()。