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

xjw163 2014-08-28 10:18:52

我的数据库中的一个表有个字段是sign,sign是一个字符串,
现在有一条数据,也包含sign,如果数据库中已经存在这个sign,那么该条数据就不再插入,如果不存在,再插入
我现在使用的办法是,每次插入的时候,都去数据库中使用SqlDataReader去读,这样效率奇低
目前想到的改进思路是,将该字段读取出来,保存到一个数组或类似List<>这样的结构里,再检测存在性。同时,如果检测到存在,最好能将数组中的该字符串清除出列,因为接下来的继续要比较的字符串不可能再有与已经比较过的重复了,清除出去应该也能再加快一点比较的速度。
目前的代码如下

//加入唯一性判断
SqlDataReader sdr = objbll.checkObjSign(aObj);
if (sdr != null)
{
if (sdr.Read())
{
//this.TextBox1.Text += obj.name + "已经添加过\r\n";
}
else
{
insertObjAmount += objbll.insert(aObj);
}
}

求指导
...全文
459 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
金火钬 2014-08-28
  • 打赏
  • 举报
回复

使用sdr ..HasRows 如果返回的是一个true,证明已经存在,否则不存在
xjw163 2014-08-28
  • 打赏
  • 举报
回复
引用 6 楼 zhi_ai_yaya 的回复:
用merge into 来插入,己有的记录更新(覆盖),没有的记录插入。
谢谢你的回复,已有的记录不希望动,因为包含updatetime信息。所以需要自行判断。
我叫小菜菜 2014-08-28
  • 打赏
  • 举报
回复
用merge into 来插入,己有的记录更新(覆盖),没有的记录插入。
xjw163 2014-08-28
  • 打赏
  • 举报
回复
引用 4 楼 caozhy 的回复:
放在内存中也可以,如果只有几千条,用一个List<string>,以及用Contains方法就可以了。性能不是问题。
谢谢版主,已经准备采用这种方法:


List<string> signs = new List<string>();
            signs.Add("a");
            signs.Add("b");
            string str = "a";
            if (signs.Contains(str))
            {
                signs.Remove("a");
                MessageBox.Show("y");
            }
            else
            {
                MessageBox.Show("n");
            }
threenewbee 2014-08-28
  • 打赏
  • 举报
回复
放在内存中也可以,如果只有几千条,用一个List<string>,以及用Contains方法就可以了。性能不是问题。
xjw163 2014-08-28
  • 打赏
  • 举报
回复
引用 2 楼 caozhy 的回复:
将sign列作为索引列 用以下sql查询: select count(*) from table where sign = '你要判断的' 用SqlCommand.ExecuteScalar()执行,返回0就是没有,否则就是有。
版主你好,谢谢回复。 我每次执行插入操作的时候不是一条数据,是批量的,比如说有50条,此时数据库比如说已经有1000条数据了, 如果每次插入的时候都连接一下数据库的话我想是不是不太好,所以我想,把数据库中的sign字段存到数组里, 插入前检测一下,这样只需要检索一次数据库
threenewbee 2014-08-28
  • 打赏
  • 举报
回复
将sign列作为索引列 用以下sql查询: select count(*) from table where sign = '你要判断的' 用SqlCommand.ExecuteScalar()执行,返回0就是没有,否则就是有。
xjw163 2014-08-28
  • 打赏
  • 举报
回复
方法一 string[] a = new string[] { "1", "2", "3" }; a.Contains<string>("1"); //返回 true或者 false,存在或者不存在 http://zhidao.baidu.com/link?url=gq1uzKrH_gw57mWzkvGkYH5ycI6MiXULI0eLDShOqV4kTTnf_CkxxufhNTaowjFrkUzM9RZjo8uiqujcNrIZJK 这个技术是否可行?

111,098

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧