public int ExecuteNonQuery(string connectionString, string spName, string[] paramsNames, params object[] parameters) { if (paramsNames.Length != parameters.Length) throw new Exception("存储过程参数匹配错误!"); SqlParameter[] paras = new SqlParameter[parameters.Length]; for (int i = 0; i < parameters.Length; i++) { paras[i] = new SqlParameter(paramsNames[i], parameters[i]); } return _sqlDataHelper.ExecuteNonQuerySP(connectionString, spName, paras); }
[color=#FFFF99] foreach (SearchResult sr in results) { i++; User user =ReadUser(sr); SqlParameter[] parameters = { new SqlParameter("@login_username", SqlDbType.VarChar), new SqlParameter("@name", SqlDbType.VarChar), new SqlParameter("@email", SqlDbType.VarChar),
new SqlParameter("@gender", SqlDbType.Int), new SqlParameter("@province", SqlDbType.VarChar), new SqlParameter("@city", SqlDbType.VarChar), new SqlParameter("@address", SqlDbType.VarChar), new SqlParameter("@birthday", SqlDbType.DateTime), new SqlParameter("@mobilephone", SqlDbType.VarChar),
俺觉得list<大英百科全书>.sort()也不至于那么长时间
我只是循环这个list ,次数有点多,14万
算法,我仅仅是循环这个list,做插入操作
public int ExecuteNonQuery(string connectionString, string spName, string[] paramsNames, params object[] parameters)
{
if (paramsNames.Length != parameters.Length)
throw new Exception("存储过程参数匹配错误!"); SqlParameter[] paras = new SqlParameter[parameters.Length];
for (int i = 0; i < parameters.Length; i++)
{
paras[i] = new SqlParameter(paramsNames[i], parameters[i]);
} return _sqlDataHelper.ExecuteNonQuerySP(connectionString, spName, paras);
}
你那些写会导致每次都打开关闭数据库连接。估计_sqlDataHelper工具类 _sqlDataHelper.ExecuteNonQuerySP(connectionString, spName, paras);就是每次打开新连接的。虽然据说ADO.NET自带线程池(据说,没看到过官方证实)。但是你可以尝试下如下写:最好是using(SqlConnection conn=new SqlConnection(connectionString)){
//打开数据连接等你需要的操作
.........
conn.open();
.........
for(遍历你的list){
SqlCommand cmd = new SqlCommand("XXXX", conn);
cmd.CommandType = CommandType.StoredProcedure;
......//ADO.NET运行存储过程的代码,你可以网上找下模仿着来
cmd.ExecuteNonQuery();
}
}此外 在上面基础上你可以多开几个线程,比如把数据分成5个部分,用5个线程执行去分别执行其中一部分。不过基本上单线程就可以了。我这么写,打开事务的情况下,插入3627行数据,提交事务完成,这个过程在1分钟之内。因为中间涉及网络通信,所以具体时间我也没测过。
[color=#FFFF99] foreach (SearchResult sr in results)
{
i++;
User user =ReadUser(sr);
SqlParameter[] parameters = {
new SqlParameter("@login_username", SqlDbType.VarChar),
new SqlParameter("@name", SqlDbType.VarChar),
new SqlParameter("@email", SqlDbType.VarChar),
new SqlParameter("@gender", SqlDbType.Int),
new SqlParameter("@province", SqlDbType.VarChar),
new SqlParameter("@city", SqlDbType.VarChar),
new SqlParameter("@address", SqlDbType.VarChar),
new SqlParameter("@birthday", SqlDbType.DateTime),
new SqlParameter("@mobilephone", SqlDbType.VarChar),
new SqlParameter("@group", SqlDbType.VarChar),
new SqlParameter("@company", SqlDbType.VarChar),
new SqlParameter("@department", SqlDbType.VarChar),
new SqlParameter("@office", SqlDbType.VarChar),
new SqlParameter("@team", SqlDbType.VarChar),
new SqlParameter("@state", SqlDbType.Int)
};
user.GroupCompany = "浙江移动总公司";
parameters[0].Value = user.ID;
parameters[1].Value = user.Name;
parameters[2].Value = user.EmailAddress;
parameters[3].Value = user.Gender;
parameters[4].Value = user.Province;
parameters[5].Value = user.City;
parameters[6].Value = user.Street;
parameters[7].Value = user.Birthday ;
parameters[8].Value = user.MobilePhone;
parameters[9].Value = "浙江移动总公司";
parameters[10].Value = user.Company;
parameters[11].Value = user.DepartmentName;
parameters[12].Value = user.OfficeLocation;
parameters[13].Value = user.Team;
parameters[14].Value = user.Status_Attribute;
try
{
SqlDataReader a= DbHelperSQL.RunProcedure("ImportSyncProfileofBosss", parameters);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}}[/color]