问题描述
我的数据库中的一个表有个字段是sign,sign是一个字符串,现在有一条数据,也包含sign,如果数据库中已经存在这个sign,那么该条数据就不再插入,如果不存在,再插入我现在使用的办法是,每次插入的时候,都去数据库中使用SqlDataReader去读,这样效率奇低目前想到的改进思路是,将该字段读取出来,保存到一个数组或类似List<>这样的结构里,再检测存在性。同时,如果检测到存在,最好能将数组中的该字符串清除出列,因为接下来的继续要比较的字符串不可能再有与已经比较过的重复了,清除出去应该也能再加快一点比较的速度。目前的代码如下//加入唯一性判断SqlDataReadersdr=objbll.checkObjSign(aObj);if(sdr!=null){if(sdr.Read()){//this.TextBox1.Text+=obj.name+"已经添加过rn";}else{insertObjAmount+=objbll.insert(aObj);}}
求指导
解决方案
解决方案二:
方法一string[]a=newstring[]{"1","2","3"};a.Contains<string>("1");//返回true或者false,存在或者不存在http://zhidao.baidu.com/link?url=gq1uzKrH_gw57mWzkvGkYH5ycI6MiXULI0eLDShOqV4kTTnf_CkxxufhNTaowjFrkUzM9RZjo8uiqujcNrIZJK这个技术是否可行?
解决方案三:
将sign列作为索引列用以下sql查询:selectcount(*)fromtablewheresign='你要判断的'用SqlCommand.ExecuteScalar()执行,返回0就是没有,否则就是有。
解决方案四:
引用2楼caozhy的回复:
将sign列作为索引列用以下sql查询:selectcount(*)fromtablewheresign='你要判断的'用SqlCommand.ExecuteScalar()执行,返回0就是没有,否则就是有。
版主你好,谢谢回复。我每次执行插入操作的时候不是一条数据,是批量的,比如说有50条,此时数据库比如说已经有1000条数据了,如果每次插入的时候都连接一下数据库的话我想是不是不太好,所以我想,把数据库中的sign字段存到数组里,插入前检测一下,这样只需要检索一次数据库
解决方案五:
放在内存中也可以,如果只有几千条,用一个List<string>,以及用Contains方法就可以了。性能不是问题。
解决方案六:
引用4楼caozhy的回复:
放在内存中也可以,如果只有几千条,用一个List<string>,以及用Contains方法就可以了。性能不是问题。
谢谢版主,已经准备采用这种方法:List<string>signs=newList<string>();signs.Add("a");signs.Add("b");stringstr="a";if(signs.Contains(str)){signs.Remove("a");MessageBox.Show("y");}else{MessageBox.Show("n");}
解决方案七:
用mergeinto来插入,己有的记录更新(覆盖),没有的记录插入。
解决方案八:
引用6楼zhi_ai_yaya的回复:
用mergeinto来插入,己有的记录更新(覆盖),没有的记录插入。
谢谢你的回复,已有的记录不希望动,因为包含updatetime信息。所以需要自行判断。
解决方案九:
使用sdr..HasRows如果返回的是一个true,证明已经存在,否则不存在