检测一个字符串是否存在,用什么技术比较好?

问题描述

我的数据库中的一个表有个字段是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,证明已经存在,否则不存在

时间: 2024-09-20 09:43:06

检测一个字符串是否存在,用什么技术比较好?的相关文章

一个检测一个字符串在另一个字符串当中出现几次的函数

函数|字符串 U2 Forum rautinee原创$$http://u2bbs.126.com$一个网友问就写了一个,:)Function CheckTheChar(TheChar,TheString)'TheChar="要检测的字符串"'TheString="待检测的字符串"if inStr(TheString,TheChar) thenfor n =1 to Len(TheString)if Mid(TheString,n,Len(TheChar))=TheC

字符串混淆技术应用 设计一个字符串混淆程序 可混淆.NET程序集中的字符串

原文:字符串混淆技术应用 设计一个字符串混淆程序 可混淆.NET程序集中的字符串 关于字符串的研究,目前已经有两篇. 原理篇:字符串混淆技术在.NET程序保护中的应用及如何解密被混淆的字符串  实践篇:字符串反混淆实战 Dotfuscator 4.9 字符串加密技术应对策略 今天来讲第三篇,如何应用上面所学内容,设计一个字符串混淆程序. 先设计一个控制台程序,它是将要被我混淆的程序集文件: public static void Main() { try { RunSnippet(); } cat

检测一个函数是否是JavaScript原生函数的小技巧

 这篇文章主要介绍了检测一个函数是否是JavaScript原生函数的小技巧,本文给出了两种检测方法,需要的朋友可以参考下     在我的开发工作中经常会遇到需要判断一个函数是否是JavaScript原生函数的情况,有时候这是一个很必要的工作,你需要知道这个函数是浏览器自身提供的,还是由第三方封装.伪装成原生函数.当然,最好的方法是考察执行这个函数的toString方法的返回值. The JavaScript 完成这个任务的方法非常简单: 代码如下: function isNative(fn) {

string-C++用已存在字符串中的n个字符初始化另一个字符串怎样写最简单

问题描述 C++用已存在字符串中的n个字符初始化另一个字符串怎样写最简单 假设字符串 char *p,p中有100个字符,我想用其中前20个初始化一个string,但是不能改变原来的字符串p,该怎么写最简单呢? 自己写来写去总是觉得很绕 解决方案 代码最简单: char * newchar = new char[101];strncpy(newchar p 100);newchar[21] = '';string * s = new string(newchar); 解决方案二: 可以使用str

c# 如何用一个字符串,生成一对rsa密钥

问题描述 最近,接了一个加密的任务需求是用一个字符串,生成一对固定的rsa密钥如何字符串变更,生成的rsa密钥变更,如果字符串不变,生成的rsa密钥和以前的字符生成的rsa密钥一样例:字符串x="1111",生成密钥aaaaaaaaaaa,字符串x="2222",生成密钥bbbbbbbbbbbbbbbb,再使用字符串x="1111"生成密钥时,生成的密钥还是aaaaaaaaaaa,各位大圣们,这个如何做呀!最好给个算法.跪求.小弟分数不多,只能给

Oracle中如何判断一个字符串是否含有汉字(中文)

oracle中如何判断一个字符串是否含有汉字 1.1  BLOG文档结构图       1.2  前言部分   1.2.1  导读 各位技术爱好者,看完本文后,你可以掌握如下的技能,也可以学到一些其它你所不知道的知识,~O(∩_∩)O~: ①全角字符的判断,或者是含有汉字的字符串的判断       本文如有错误或不完善的地方请大家多多指正,ITPUB留言或QQ皆可,您的批评指正是我写作的最大动力. 1.2.2  实验环境介绍   11.2.0.3  RHEL6.5       1.2.3  本文

在Oracle中,如何判断一个字符串是否为数字?

在Oracle中,如何判断一个字符串是否为数字? 可以有2种办法来判断,第一种办法为REPLACE加TRANSLATE函数,在程序中可以直接使用"TRANSLATE(REPLACE('入参','.',''),'/1234567890','/') IS NULL"来判断入参为数字,缺点是,若入参有2个小数点或含有加减号则不能判断.第二种办法为使用TO_NUMBER或REGEXP_LIKE来自定义函数进行判断. 第一种办法示例: SYS@PROD1> SELECT   2     N

java-给HTTP链接的一个字符串中删除空白

问题描述 给HTTP链接的一个字符串中删除空白 我想发送一个查询的url: String url = String.format( "http://xxxxx/xxx/xxx&message=%s",myEditBox.getText.toString()); // Create a new HttpClient and Post Header DefaultHttpClient httpclient = new DefaultHttpClient(); HttpPost ht

json-android把一个字符串变成键值对的形式

问题描述 android把一个字符串变成键值对的形式 android客户端把一个字符串变成键值对(JSON之类的)的形式,比如:{name=张三,age=20,sex=男}..实在不明白..唉..求解答.. 解决方案 String[] arrays = new String[]{"name=张三", "age=20", "sex=男"}; JSONObject element = new JSONObject(); for(int i= 0; i