![](/img/trans.png)
[英]C# Application freezes at adding the SQLite query results to List<string>
[英]C# sqlite query results to list<string>
我正在掙扎。 我查詢了我的db,它返回一列數據,我需要將其設置為List。 這是我正在使用的,我收到一個關於將void轉換為字符串的錯誤。
public static void GetImportedFileList()
{
using (SQLiteConnection connect = new SQLiteConnection(@"Data Source=C:\Documents and Settings\js91162\Desktop\CMMData.db3"))
{
connect.Open();
using (SQLiteCommand fmd = connect.CreateCommand())
{
SQLiteCommand sqlComm = new SQLiteCommand(@"SELECT DISTINCT FileName FROM Import");
SQLiteDataReader r = sqlComm.ExecuteReader();
while (r.Read())
{
string FileNames = (string)r["FileName"];
List<string> ImportedFiles = new List<string>();
}
connect.Close();
}
}
}
然后在申請中
List<string> ImportedFiles = GetImportedFileList() // Method that gets the list of files from the db
foreach (string file in files.Where(fl => !ImportedFiles.Contains(fl)))
public static List<string> GetImportedFileList(){
List<string> ImportedFiles = new List<string>();
using (SQLiteConnection connect = new SQLiteConnection(@"Data Source=C:\Documents and Settings\js91162\Desktop\CMMData.db3")){
connect.Open();
using (SQLiteCommand fmd = connect.CreateCommand()){
fmd.CommandText = @"SELECT DISTINCT FileName FROM Import";
fmd.CommandType = CommandType.Text;
SQLiteDataReader r = fmd.ExecuteReader();
while (r.Read()){
ImportedFiles.Add(Convert.ToString(r["FileName"]));
}
}
}
return ImportedFiles;
}
我在你的代碼中修改過的東西:
ImportedFiles
放在整個方法的范圍內。 connect.Close();
因為連接對象包含在使用塊中。 Convert.ToString
而不是(String)
因為前者將處理所有數據類型轉換為字符串。 我在這里遇到過這個 編輯:
您正在創建一個新的命令對象sqlComm
而不是使用由連接對象創建的fmd
。
首先,您的返回類型是無效的。 您需要返回一個List。 另一個問題是你在循環中初始化列表,所以在循環的每次傳遞中你都有一個新列表,而且更多的是,你不在列表中添加字符串。 你的代碼應該更像是:
public static List<string> GetImportedFileList()
{
List<string> ImportedFiles = new List<string>();
using (SQLiteConnection connect = new SQLiteConnection(@"Data Source=C:\Documents and Settings\js91162\Desktop\CMMData.db3"))
{
connect.Open();
using (SQLiteCommand fmd = connect.CreateCommand())
{
fmd.CommandText = @"SELECT DISTINCT FileName FROM Import";
SQLiteDataReader r = fmd.ExecuteReader();
while (r.Read())
{
string FileNames = (string)r["FileName"];
ImportedFiles.Add(FileNames);
}
connect.Close();
}
}
return ImportedFiles;
}
錯誤是關於方法的返回類型。 您將返回void( public static
void
),但稍后再使用它,就像它返回List<string>
。
我認為您打算使用以下方法簽名:
public static List<string> GetImportedFileList()
你已經有了獲得個人結果的方法,所以對你而言,你只需要:
移動List<string> ImportedFiles = new List<string>();
在while
循環之外。
調用ImportedFiles.Add(FileNames);
在循環內部(在該字符串被分配之后)。
return ImportedFiles
。
將返回類型更改為List<string>
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.