永发信息网

c#如何删除数据库中数据,删除条件在一个数组里面,执行一次查询搞定,不要循环

答案:1  悬赏:50  手机版
解决时间 2021-12-25 06:03
比如:

...{

string[] list1={"name1|time1","name2|time2","name3|time3","name4|time4","name5|time5","name6|time6"......}

for (int i = 0; i < list1.Length; i++)

{

string[] fullurl = list1[i].Split('|');

del(fullurl[0], fullurl[1]);

}

//提示删除成功


del方法:

public void del(string FullUrlFileName, string FileLastChangetime)

{

OleDbConnection con = DB.createConnection();

con.Open();

string sql = "delete from Files where Files_name='" + FullUrlFileName.ToString() + "' and

Files_lastchangetime='" + FileLastChangetime.ToString() + "'";

OleDbCommand com = new OleDbCommand(sql, con);

OleDbDataReader dr1;

dr1 = com.ExecuteReader();

dr1.Read();



这样实现删除效率我觉得很慢,有没有好方法,一句查询语句删除想删除的对象,不要循环一条一条删除,数组里面的字段对应sql语句where中对应的字段。。
最佳答案
StringBuilder where = new StringBuilder();
for (int i = 0; i < list.Length; i++) {
string[] fullurl = list1[i].Split('|');
where.Append(string.Format("(Files_name='{0}' and Files_lastchangetime = '{1}') or ", fullurl));
}
where.Append(" 1 < 1");

这样就可以拼成一个长where条件, 可以一次执行. 但是实际上数据库执行效率并不会有显著提高. 并且sql语句的长度会有限制, 如果数据量大的话就不能执行了.

你之所以感觉慢, 主要是因为你每次执行都会创建连接, 使用长连接或连接池(如果支持), 就能显著提高程序性能. 之后你可以观察下, 循环执行和拼接长SQL语句一次执行, 两者差异可以忽略不计.

在这样的前提下, 使用拼接SQL的方法要额外判断语句长度, 如处理不当, 程序可靠性会大打折扣. 所以改成使用连接池, 逐条执行是最可行的方案.

另: 执行delete语句应该使用ExecuteNonQuery方法
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
请问,请问博客能上锁的吗??如果能,怎样弄?,我
看轻自己阅读答案
鞋子起皱怎么办
冰在零度时会融化吗
太原哪里有比较好的高中化学竞赛的课
清水出芙蓉 天然去雕饰 是什么意思呢
如何养好阿拉斯加雪橇犬
一个小项目的需求分析大致要写哪些部分
随县至武汉高速多少公里
The dirty, homeless man sat on the pavemen
水在生物和食物中的存在状态分为什么水和什么
同一个路由器怎么建立局域网?
其实我也很想没心没肺的活着,但我真做不到。
She was born to wealth and power in an era
圣经翻译问题
推荐资讯
有一部洪荒小说,主角穿越到三国去了,名字叫
用什么成语形容一个人知识多,学问高.只要一个
溢胶的英文单词怎么写?
是马也的也的意思
南乐县濮阳追梦艺术培训中心在什么地方啊,我
步步高家教机真的好吗
苹果5系统用无线网络升级,是不是直接安装的
长治市给力机动车检测有限公司在什么地方啊,
2008年北京奥运会的标志性工程国家体育馆(“
全国有名的高职一专都有哪些学校
佳能60D闪光灯自动弹出怎么办
录像机80,8000,554分别是什么协议
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?