15 Stimmen

C# sqlite Abfrageergebnisse in list<string>

Ich habe Schwierigkeiten. Ich habe Abfrage gegen meine DB, die eine einzelne Spalte von Daten zurückgibt und ich muss es als Liste festlegen. Hier ist, was ich mit arbeiten und ich erhalte eine Fehlermeldung über die Umwandlung von void in String.

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();
        }
    }
}

Dann später in der Anwendung

List<string> ImportedFiles = GetImportedFileList() // Method that gets the list of files from the db 
foreach (string file in files.Where(fl => !ImportedFiles.Contains(fl)))

34voto

Bablo Punkte 886
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;
}

Dinge, die ich in Ihrem Code geändert habe:

  • Setzen Sie ImportedFiles im Rahmen der gesamten Methode.
  • Kein Anruf nötig connect.Close(); da das Verbindungsobjekt in einen using-Block eingeschlossen ist.
  • Utilisez Convert.ToString eher als (String) da erstere alle Datentypkonvertierungen in String übernimmt. Ich bin auf Folgendes gestoßen Hier

Edit :

Sie haben ein neues Befehlsobjekt erstellt sqlComm statt mit fmd die durch das Verbindungsobjekt erstellt wurde.

3voto

Nikos Steiakakis Punkte 5315

Zunächst einmal ist Ihre Rückgabeart ungültig. Sie müssen eine Liste zurückgeben. Ein weiteres Problem ist, dass Sie die Liste innerhalb der Schleife initialisieren, so dass Sie bei jedem Schleifendurchlauf eine neue Liste haben, und außerdem fügen Sie die Zeichenfolge nicht in die Liste ein. Ihr Code sollte wahrscheinlich eher wie folgt aussehen:

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;
}

0voto

lc. Punkte 109470

Der Fehler bezieht sich auf den Rückgabetyp Ihrer Methode. Sie geben void ( public staticvoid ), aber verwenden Sie es später, als ob es eine List<string> .

Ich denke, Sie wollten die folgende Methodensignatur:

public static List<string> GetImportedFileList()

0voto

JustABill Punkte 1532

Sie haben bereits eine Möglichkeit, die einzelnen Ergebnisse zu erhalten, also sieht es für mich so aus, als ob Sie das nur brauchen:

Bewegen Sie die List<string> ImportedFiles = new List<string>(); außerhalb der while Schleife.

Rufen Sie an. ImportedFiles.Add(FileNames); innerhalb der Schleife (nachdem die Zeichenfolge zugewiesen wurde).

return ImportedFiles am Ende.

Ändern Sie den Rückgabetyp in List<string> .

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X