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中对应的字段。。 展开
...{
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中对应的字段。。 展开
1个回答
展开全部
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方法
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方法
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询