1、我现在做的查询功能,每次点好按钮就查询一次,但是遇到个奇怪的问题,只能查询一次,不能再继续查询了,是有什么问题吗
private void buttonSearch_Click(object sender, EventArgs e) { int len = textBoxSearch.TextLength; string realString = ""; char[] strArry = textBoxSearch.Text.ToArray(); for (int i = len; i > 0; i--) { realString = "%" + strArry[i - 1] + realString; } string sql = "select * from EquipmentInformation where DeviceID LIKE'" + realString + "%'" + " or DeviceType LIKE'" + realString + "%'" + " or DeviceLocation LIKE'" + realString + "%'" + " or DeviceLendSituation LIKE'" + realString + "%'" + " or DeviceStatus LIKE'" + realString + "%'"; SqlDataAdapter da = new SqlDataAdapter(sql, conn); DataSet ds = new DataSet(); da.Fill(ds, "EquipmentInformation"); dataGridView1.DataSource = ds; dataGridView1.DataSource = ds.Tables["EquipmentInformation"]; }
中文查询不了,数字查询有时候会有显示结果,有时候没有显示结果,有点奇怪,我没做什么限制啊
你自己debug看看你最后拼出来的sql语句,那玩意能出东西么?
ps:你这样写sql很危险的。
能教我一下怎么写sql 不危险吗,我才上手,很多规矩都不知道,
@一首歌听到忘世:
1.你sql语句就写错了,你那realString那样拼接中间会出现多少个%出来?
2.sql查询你至少要保证安全性吧,你去查下参数化查询和sql注入这两个主题
3.你这样大规模的like '%%'数据量大了会有点吃力的。
@Daniel Cai: 嗯,有道理,我只考虑到了结果,没考虑到会带来什么后果,以后不能随便用通配符
我发现我不能简单匹配一个字,比如数据库里的信息是:我是谁,如果我只where name = N‘我’,就会没有结果,这个怎么解决。
这个可以用%我%,来搞定,但是,,这样好不好。。应该不怎么好。求更好的解决方法
@一首歌听到忘世: 简单点的话只能是做like,但这种效率毕竟是有问题的。要么你就试下用倒排索引把关键字从里面抽出来单独查,当然要配合一些做分词的玩意了。
另一种就是直接撸类似lucence这样的玩意,难度也不大。
@Daniel Cai: 这个查询逻辑上是可以过的 你写查询层次化会好些 没拼接一次一个换行 所偶有的or连接一起 然后括起来 你这个的意思是 以realString开头的查询
"不能再继续查询"不知道这个具体表现为什么?
刚刚又调试了下,发现是因为不能查找中文,导致的查找结果空白,然后我认为是不能继续查找了,。但是那我主要是找中文。。这段代码要怎么去改
发现,就是在某些查询下,数字查询,也会显示不出结果(有些时候也会有结果),而我找的东西,就是数据库中一模一样的,还没做修改的内容
问题解决了,在查询条件前加了N,就好,多谢关注
@一首歌听到忘世:把这段sql拿到DB测试下不就知道了。就两个方面,要么sql写的有问题,要么code写的有问题,debug两次就出来了
@~扎克伯格: DB测试是什么,能教一下我吗
问题解决了,在查询条件前加了N,就好,多谢关注。
在查询中文的时候需要在前面增加N
应该是这个测试