SqlDataReader à lire dans la Liste des<string>
Je suis en train d'écrire une méthode en C# pour interroger une base de données SQL Server Express à partir d'un service WCF. J'ai utiliser ADO.NET pour ce faire (puis le réécrire avec LINQ plus tard).
La méthode prend deux chaînes de caractères (fname, lname
) puis renvoie une "Assurance Santé PAS de" attribut de l'enregistrement correspondant. Je veux lire cela dans une liste (il y en a quelques autres attribs à récupérer).
Le code actuel retourne une liste vide. Où vais-je tort?
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;
}
Bien le déboguer. Est-il entrer dans le
Vous assurer que vous êtes réellement obtenir des données?
vous avez raison... ce n'est pas l'exécution de cette ligne. J'ai fait exécuter la requête manuellement pour être sûr que c'était correct, il renvoie l'enregistrement correct. Toutes mes excuses, j'ai été d'insérer des points d'arrêt et en essayant de débogage pour presque 3 jours maintenant...!
Sachant cela, maintenant, je suis soupçonner la chaîne de connexion peut être le coupable. Je vais jeter un oeil et de faire rapport.
Vous avez des bugs mentionnés de toute façon. Donc, le chargement d'une
while
bloc? Faut-il réellement exécuter le result.Add
ligne? Également exécuter la même chose sur la base de données vous-même: prendre la valeur de sqlquery
et l'exécuter sur la base de données manuellement.Vous assurer que vous êtes réellement obtenir des données?
vous avez raison... ce n'est pas l'exécution de cette ligne. J'ai fait exécuter la requête manuellement pour être sûr que c'était correct, il renvoie l'enregistrement correct. Toutes mes excuses, j'ai été d'insérer des points d'arrêt et en essayant de débogage pour presque 3 jours maintenant...!
Sachant cela, maintenant, je suis soupçonner la chaîne de connexion peut être le coupable. Je vais jeter un oeil et de faire rapport.
Vous avez des bugs mentionnés de toute façon. Donc, le chargement d'une
DataTable
dans une boucle avec Load
est inutile, à l'aide de pas de sql-paramètres est dangereux, à l'aide de SqldataReader.Read
avec DataTable.Load
n'est pas nécessaire, à l'aide d'un DataTable
quand vous avez besoin d'une liste est redondante.OriginalL'auteur reallybadatmath | 2013-10-10
Vous devez vous connecter pour publier un commentaire.
Vous essayez de charger un
DataTable
viaDataTable.Load
>dans une boucle<. Vous avez juste besoin qu'une seule fois. Vous êtes également à l'aide dereader.Read()
dans la boucle.SqlDataReader.Read()
avances le lecteur à l'enregistrement suivant sans la consommer. Si vous allez utiliserDataTable.Load
vous n'avez pas besoin de lire tout d'abord le lecteur. Vous n'avez qu'à supprimer la boucle complètement au chargement de la table.Mais puisque vous voulez retourner une liste, vous n'avez pas besoin de la
DataTable
à tous, juste boucle le lecteur:En dehors de cela, vous êtes ouvert pour sql-sql injection sans paramètres.
+1 Parce que j'ai juste besoin d'une rapide façon simple de le faire. CEPENDANT - et cela n'enlève rien à cette réponse - vous besoin de regarder pour les erreurs de conversion ou DBNull valeurs. Je n'ai que 5 colonnes à lire, donc remaniée en conséquence.Ajouter( createNewMyObjectFromReader() ) et traitées chaque colonne.... si (Système d'.DBNull.la valeur != reader["someColumn"])
OriginalL'auteur Rango
Je voudrais faire de cette façon:
OriginalL'auteur Jamie