SqlDataReader zu Lesen, in Liste<string>

Schreibe ich eine Methode in C# zur Abfrage einer SQL Server Express-Datenbank, die von einem WCF service. Ich habe zu verwenden ADO.NET um dies zu tun (und schreiben Sie es mit LINQ später).

Die Methode nimmt zwei strings (fname, lname) gibt dann eine "Krankenversicherung NO" - Attribut aus dem passenden Datensatz. Ich möchte Lesen Sie diese in einer Liste (es gibt einige andere attribs abrufen als auch).

Den aktuellen code gibt eine leere Liste zurück. Wo mache ich falsch?

public List<string> GetPatientInfo(string fname, string lname)
{
    string connString = "Data Source=.\\SQLEXPRESS;AttachDbFilename=C:\\Users\\xxxx\\Documents\\Visual Studio 2010\\Projects\\ADOWebApp\\ADOWebApp\\App_Data\\ADODatabase.mdf;Integrated Security=True;User Instance=True";

    SqlConnection conn = new SqlConnection(connString);

    string sqlquery = "SELECT Patient.* FROM Patient WHERE ([First Name] = '"+fname+"') AND ([Last Name] = '"+lname+"')";
    SqlCommand command = new SqlCommand(sqlquery, conn);
    DataTable dt = new DataTable();

    List<string> result = new List<string>();

    using (conn)
    {
        conn.Open();

        using (SqlDataReader reader = command.ExecuteReader())
        {
            while (reader != null && reader.Read())
            {
               dt.Load(reader);
               result.Add(Convert.ToString(reader["Health Insurance NO"]));
            }
        }
     }

     return result;
}
  • Gut Debuggen. Es tut geben Sie die while block? Tut es eigentlich führen Sie die result.Add Linie? Außerdem führen die gleiche Sache gegen die Datenbank selbst: nehmen Sie den Wert des sqlquery und führen Sie es auf die Datenbank manuell.
  • Sie sicher, Sie sind eigentlich immer Daten zurück?
  • du hast Recht... es ist nicht ausgeführt, dass die Linie überhaupt. Ich habe die Abfrage ausführen manuell, um sicherzustellen, dass es richtig war, es gibt den richtigen Datensatz. Entschuldige bitte, ich habe das einfügen von Haltepunkten in und versucht zu Debuggen, dies für fast 3 Tage jetzt...!
  • Dies zu wissen nun, ich bin zu Ahnen, die Verbindungszeichenfolge kann die Ursache sein. Ich werde mal schauen und berichten.
  • Yep! Es war der Verbindungszeichenfolge. Ich werde löschen Sie diese Frage, denn es ist irreführend für diejenigen, die vielleicht stolpern Sie.
  • Sie haben den genannten Fehler trotzdem. So laden DataTable in einer Schleife mit Load ist sinnlos, ohne Verwendung von sql-Parametern ist gefährlich, mit SqldataReader.Read mit DataTable.Load ist nicht notwendig, mit einem DataTable an alle, wenn Sie eine Liste ist überflüssig.
  • Dank Tim. Ich habe am Ende auf alle Ihre Vorschläge mit dem code, wenn ich es geschafft habe. Viele der Fehler kam von mir versucht alle möglichen Dinge zu bekommen, den code zu arbeiten, meine ersten versuche haben sich ähnlich zu dem, was Sie mitgeteilt hatte. EDIT: ich dachte auch, ich hatte bereits markiert Ihren code als Antwort. Ich entschuldige mich.

Schreibe einen Kommentar