C# Foreach with MySQL
本文关键字:MySQL with Foreach | 更新日期: 2023-09-27 18:16:07
我目前正在c#中开发一个补丁系统,并且遇到了一个小问题。我使用MySQL为我的更新列表存储存档。然后,补丁系统检测程序的版本,并下载该版本之后的每个补丁。虽然我刚开始学习如何在c#中使用MySQL,所以我不确定如何做,或调用很多所需的函数。我想做的是使用foreach
调用"版本"列/行中的所有值,然后使用while循环来检查当前版本和新版本,直到它们相同。我就是不知道怎么把这两者结合起来,也找不到任何参考资料。
using (SqlCon = new MySqlConnection(connString))
{
SqlCon.Open();
string command = "SELECT * FROM version ORDER BY version";
MySqlCommand GetLatestVersion = new MySqlCommand(command, SqlCon);
using (MySqlDataReader DR = GetLatestVersion.ExecuteReader())
{
while (DR.Read())
{
foreach(DataTable i in DR)
{
while(v1 < v2)
{
string LatestVersion = Convert.ToString(DR.GetValue(1));
string WebURL = Convert.ToString(DR.GetValue(2));
update.DownloadProgressChanged += new DownloadProgressChangedEventHandler(download);
update.DownloadFileCompleted += new AsyncCompletedEventHandler(extration);
update.DownloadFileAsync(new Uri(WebURL), tempFilePath + "patch" + Latest_Version + ".zip");
}
}
}
}
}
SqlCon.Close();
只要去掉内部的foreach
就可以了
首先你不需要最后的SqlCon.Close();
。在using
块的末尾,对象被处理(using
块的点)。
可以修改select语句,使其只选择比程序当前版本大的版本。这样,任何选中的记录都应该被处理/下载。(我把版本在引号中的SQL语句,因为你的代码表明它是一个字符串。不过,出于排序/比较的目的,您最好将此值指定为数字。)
//for readability, I changed the variable name to myProgramsVersion
using (SqlCon = new MySqlConnection(connString))
{
SqlCon.Open();
string command = "SELECT * FROM version where version > '" + myProgramsVersion + "' ORDER BY version";
MySqlCommand GetLatestVersion = new MySqlCommand(command, SqlCon);
using (MySqlDataReader DR = GetLatestVersion.ExecuteReader())
{
while (DR.Read())
{
string LatestVersion = Convert.ToString(DR.GetValue(1));
string WebURL = Convert.ToString(DR.GetValue(2));
update.DownloadProgressChanged += new DownloadProgressChangedEventHandler(download);
update.DownloadFileCompleted += new AsyncCompletedEventHandler(extration);
update.DownloadFileAsync(new Uri(WebURL), tempFilePath + "patch" + Latest_Version + ".zip");
}
}
}