【发布时间】:2018-08-24 10:27:19
【问题描述】:
我的表中有 24 个字段,它们都是 nvarchar 类型,除了一个 int 类型,它是 ID 现在我想在所有字段中搜索用户在 textBox 中写入的任何文本,例如,如果用户会写“ 20”在文本框中,它应该显示所有记录,他们的字段有“20”。在数据网格视图中返回任何东西!!
这是我的存储过程:
create proc searchClientProfile
@search nvarchar(255)
as
select * from clientProfile where convert(nvarchar,ID)+compName+Addres+compPhone+compEmail+compWebsite+shipAddress+shipPhone+primeContact+primePhone+primeEmail+secContact+secPhone+secEmail+sector+established+industry+anulPrch+country+region+town+stat+city+zip like '%@search%'
这是我的 textBox TextChanged 事件中的代码:
cmd = new SqlCommand("searchClientProfile", cn);
cmd.CommandType = CommandType.StoredProcedure;
SqlParameter[] parm = new SqlParameter[1];
parm[0] = new SqlParameter("@search", SqlDbType.NVarChar, 255);
parm[0].Value = searchClientTxt.Text.Trim();
cmd.Parameters.AddRange(parm);
da = new SqlDataAdapter(cmd);
da.Fill(getSearchedClientProfiles);
searchClientsDgv.DataSource = getSearchedClientProfiles;
【问题讨论】:
-
如果其中一列为空,则整个拼接结果为空。比较
select 'test'+null和select 'test'+ISNULL(null,'') -
您需要阅读这篇文章并重新考虑您的搜索逻辑。并且绝对不要选择*,只选择你需要的列。 sqlinthewild.co.za/index.php/2009/03/19/catch-all-queries 请注意,使用前导通配符搜索会使索引变得无用。因此,在所有这些列中执行此操作对性能来说会很糟糕。
标签: c# sql-server winforms search stored-procedures