根据上面的图片,谁能帮我提升一下 修改速度啊!自己测试的30分钟才修改4千多条,修改几十万条数据要等很长时间了,哪位大神帮帮我啊,我是新手, 论坛上没有币,希望有好心人帮我解决一下。
已经解决了,原来是我程序写的有点问题,把获取文件名的List放到for循环外面就可以了,真是大意了
///
/// 对比表中文件名和实体文件名是否一样,并修改状态
///
/// 要查询的表名
/// 批次日期范围
/// 文件夹的路径
public void updateDispatch(string tableDispatchName, string batchScope, string filePath)
{
try
{
DataSet dataSet = getDispatchFileName(tableDispatchName, batchScope);
foreach (DataRow dataRow in dataSet.Tables[0].Rows)
{
int key = Int32.Parse(dataRow["ApplicationKey"].ToString()); //主键
string wenJianCFLJ = dataRow["WenJianCFLJ"].ToString(); //数据库中文件的路径
string wenJianName = wenJianCFLJ.Substring(wenJianCFLJ.LastIndexOf("/") + 1); //截取字符串,获取文件名
List fileNameList = getFilesName(filePath); //获取文件名
string statusFile = "";
if (fileNameList.Contains(wenJianName)) //判断数据库中的文件名和本地文件夹下的文件名是否相同
{
statusFile = "OK";
updateDispatchStatusFile(tableDispatchName, statusFile, key); //修改数据库statusFile为OK
}
else
{
statusFile = "error";
updateDispatchStatusFile(tableDispatchName, statusFile, key); //修改数据库statusFile为error
}
}
}
catch (Exception ex)
{
Log.writeLog(ex); //打印异常日志
}
}
/// <summary>
/// 获取数据库的信息 WenJianCFLJ字段为文件的路径
/// </summary>
/// <param name="tableDispatchName">要查询的表名</param>
/// <param name="batchScope">批次日期范围</param>
public DataSet getDispatchFileName(string tableDispatchName, string batchScope)
{
MySqlDataAdapter dataAdapter; // 声明DataAdapter
MySqlConnection myconn = SqlConnection.getMySqlConn();
string sql = "SELECT ApplicationKey,WenJianCFLJ FROM " + tableDispatchName +
" WHERE BatchScope = '" + batchScope + "' AND StatusDispatch = 'OK' ";
MySqlCommand cmd = new MySqlCommand(sql, myconn);
myconn.Open(); //连接
dataAdapter = new MySqlDataAdapter(); // 初始化 DataAdapter
dataAdapter.SelectCommand = cmd;
DataSet dataSet = new DataSet(); // 声明并初始化DataSet
dataAdapter.Fill(dataSet); // 填充 DataSet
myconn.Close();
return dataSet;
}
/// <summary>
/// 修改表中的文件名对比状态
/// </summary>
/// <param name="tableDispatchName">要修改的表名</param>
/// <param name="statusFile">文件名对比状态</param>
/// <param name="applicationKey">根据主键修改</param>
public void updateDispatchStatusFile(string tableDispatchName, string statusFile, int applicationKey)
{
try
{
MySqlConnection myconn = SqlConnection.getMySqlConn();
string sql = "UPDATE " + tableDispatchName +
" SET StatusFile = '" + statusFile + "' " +
" WHERE ApplicationKey = '" + applicationKey + "'";
Console.WriteLine(sql);
MySqlCommand cmd = new MySqlCommand(sql, myconn);
myconn.Open();
cmd.CommandTimeout = 100;
//执行SQL语句 ExecuteNonQuery为 增、删、改的方法
int i = cmd.ExecuteNonQuery(); Console.WriteLine(i);
myconn.Close();
cmd.Dispose();
}
catch (Exception ex)
{
Log.writeLog(ex);
}
}
/// <summary>
/// 获取文件夹下所有文件的文件名
/// </summary>
/// <param name="filePath">文件夹的路径</param>
public List<string> getFilesName(string filePath)
{
DirectoryInfo dir = new DirectoryInfo(filePath);
List<String> listFileName = new List<string>();
if(dir.Exists)
{
FileInfo[] files = dir.GetFiles();
foreach(var item in files)
{
listFileName.Add(item.Name); //item.Name为文件名,带有后缀名
}
}
return listFileName;
}
我把代码复制下来了,求大神帮我解决下。