簡體   English   中英

C#sqlite查詢結果列表<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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM