执行大量SQL子句问题的简化
今天做一个财务报表,要用到很多查询数据库,结果我写了个程序,算下来用了800条SQL来查,每条都是分开的,开了了连接 查了又关。。。。这样速度很慢,费时半分钟,用户明显体验不好。代码如下:
public List<Dictionary<string, object>> GetList(String sql, String[] properties)
{
int prosLength = properties.Length;
SqlCommand command = new SqlCommand(sql);
SqlConnection sqlConn = getConnection();
command.Connection = sqlConn;
if (sqlConn.State != ConnectionState.Open)
{
sqlConn.Open();
}
SqlDataReader read = command.ExecuteReader();
List<Dictionary<string, object>> list = new List<Dictionary<string, object>>();
Dictionary<string, object> map = null;
while (read.Read())
{
map = new Dictionary<string, object>();
for (int i = 0; i < prosLength; i++)
{
map.Add(properties, read]);
}
list.Add(map);
map = null;
}
read.Close();
sqlConn.Close();
return list;
}
string[] prototype_96 = new string[] { "clientID", "payBackNum" };
string sql_96 = "SELECT ClientID, SUM (PaymentMoney) payBackNum FROM T_C_ClientPayment WHERE PaymentDate BETWEEN '" + start + "' AND '" + end + "' GROUP BY ClientID";
List<Dictionary<string, object>> list5 = basedao.GetList(sql_96, prototype_96);
for (int i = 0; i < list.Count; i++) //这里的count有200多
{
sql1="XXXXXXX"
GetList(sql1,prototpye1);
sql2="XXXXXXX"
GetList(sql2,prototpye1);
sql3="XXXXXXX"
GetList(sql3,prototpye1);
sql4="XXXXXXX"
GetList(sql4,prototpye1);
}
上面那个for循环直接卡死。。。。。。我本来就要打算开个线程来算这个了。。。
原因就是 我在家里面 ,数据库在阿里云上,执行一条查询,连接时间和断开时间就是接近80毫秒,多了当然要卡死,我把代码放到服务器上面要好一些,因为毕竟是访问本地嘛,数据库也同时安装在服务器上的,但是还是慢。。。
最后我有优化了查询,只用了5条查询句子,但是一条查询返回的值有很多个,我全部装到泛型里面,然后再到程序里面做判断,由于在程序里面运算的时间忽略不计,所以速度很快了,秒算出来。
页:
[1]