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

比如:...{string[]list1={"name1|time1","name2|time2","name3|time3","name4|time4","name5|... 比如:

...{

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中对应的字段。。
展开
 我来答
dualmind
2012-09-28 · TA获得超过270个赞
知道小有建树答主
回答量:237
采纳率:0%
帮助的人:177万
展开全部
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方法
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式