首页 新闻 会员 周边 捐助

一个数据库问题

0
[已解决问题] 解决于 2017-01-04 16:53

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"];
        }
问题补充:

中文查询不了,数字查询有时候会有显示结果,有时候没有显示结果,有点奇怪,我没做什么限制啊

一首歌听到忘世的主页 一首歌听到忘世 | 初学一级 | 园豆:138
提问于:2016-12-27 14:19
< >
分享
最佳答案
0

你自己debug看看你最后拼出来的sql语句,那玩意能出东西么?

ps:你这样写sql很危险的。

奖励园豆:5
Daniel Cai | 专家六级 |园豆:10424 | 2016-12-27 14:44

能教我一下怎么写sql 不危险吗,我才上手,很多规矩都不知道,

一首歌听到忘世 | 园豆:138 (初学一级) | 2016-12-27 14:48

@一首歌听到忘世: 

1.你sql语句就写错了,你那realString那样拼接中间会出现多少个%出来?

2.sql查询你至少要保证安全性吧,你去查下参数化查询和sql注入这两个主题

3.你这样大规模的like '%%'数据量大了会有点吃力的。

Daniel Cai | 园豆:10424 (专家六级) | 2016-12-27 14:56

@Daniel Cai: 嗯,有道理,我只考虑到了结果,没考虑到会带来什么后果,以后不能随便用通配符

我发现我不能简单匹配一个字,比如数据库里的信息是:我是谁,如果我只where name = N‘我’,就会没有结果,这个怎么解决。

这个可以用%我%,来搞定,但是,,这样好不好。。应该不怎么好。求更好的解决方法

一首歌听到忘世 | 园豆:138 (初学一级) | 2016-12-27 17:41

@一首歌听到忘世: 简单点的话只能是做like,但这种效率毕竟是有问题的。要么你就试下用倒排索引把关键字从里面抽出来单独查,当然要配合一些做分词的玩意了。

另一种就是直接撸类似lucence这样的玩意,难度也不大。

Daniel Cai | 园豆:10424 (专家六级) | 2016-12-27 17:58

@Daniel Cai: 这个查询逻辑上是可以过的 你写查询层次化会好些 没拼接一次一个换行 所偶有的or连接一起  然后括起来 你这个的意思是 以realString开头的查询

螽斯羽 | 园豆:97 (初学一级) | 2017-10-29 22:20
其他回答(3)
0

"不能再继续查询"不知道这个具体表现为什么? 

~扎克伯格 | 园豆:1923 (小虾三级) | 2016-12-27 14:29

刚刚又调试了下,发现是因为不能查找中文,导致的查找结果空白,然后我认为是不能继续查找了,。但是那我主要是找中文。。这段代码要怎么去改

发现,就是在某些查询下,数字查询,也会显示不出结果(有些时候也会有结果),而我找的东西,就是数据库中一模一样的,还没做修改的内容

支持(0) 反对(0) 一首歌听到忘世 | 园豆:138 (初学一级) | 2016-12-27 14:31

问题解决了,在查询条件前加了N,就好,多谢关注

支持(0) 反对(0) 一首歌听到忘世 | 园豆:138 (初学一级) | 2016-12-27 14:44

@一首歌听到忘世:把这段sql拿到DB测试下不就知道了。就两个方面,要么sql写的有问题,要么code写的有问题,debug两次就出来了

支持(0) 反对(0) ~扎克伯格 | 园豆:1923 (小虾三级) | 2016-12-27 14:45

@~扎克伯格: DB测试是什么,能教一下我吗

支持(0) 反对(0) 一首歌听到忘世 | 园豆:138 (初学一级) | 2016-12-27 14:47
0

问题解决了,在查询条件前加了N,就好,多谢关注。

在查询中文的时候需要在前面增加N

一首歌听到忘世 | 园豆:138 (初学一级) | 2016-12-27 14:45
0

应该是这个测试

螽斯羽 | 园豆:97 (初学一级) | 2017-10-29 22:26
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册