web-dev-qa-db-fra.com

Lecture des valeurs de la base de données SQL en C #

je viens de commencer à apprendre le C # et je peux écrire des données dans la base de données sans problème. Mais j'ai des problèmes de lecture, le code SQL s'exécute correctement, mais le stockage me pose problème. Comment pourrais-je stocker les quatre colonnes qui devraient être retournées et ensuite les montrer comme une boîte de message? Merci.

SqlCommand myCommand = new SqlCommand("select * from Requests where Complete = 0", myConnection);
SqlDataReader myReader = myCommand.ExecuteReader();
while (myReader.Read())

Console.WriteLine(myReader["Username"].ToString());
Console.WriteLine(myReader["Item"].ToString());
Console.WriteLine(myReader["Amount"].ToString());
Console.WriteLine(myReader["Complete"].ToString());
23
Paul

Un problème est absent des accolades après le temps

while (myReader.Read())
{  // <<- here
    Console.WriteLine(myReader["Username"].ToString());
    Console.WriteLine(myReader["Item"].ToString());
    Console.WriteLine(myReader["Amount"].ToString());
    Console.WriteLine(myReader["Complete"].ToString());
}  // <<- here

si vous ignorez les accolades, seule la première ligne sera traitée dans chaque boucle, le reste sera traité après la boucle, puis myReader sera passé la dernière ligne.

29
Albin Sunnanbo

N'oubliez pas d'utiliser le bloc using(){}:

using (SqlConnection connection = new SqlConnection(connectionString))
using (SqlCommand command = new SqlCommand("select * from Requests where Complete = 0", connection))
{
    connection.Open();  
    using (SqlDataReader reader = command.ExecuteReader())
    {
        while (reader.Read())
        {
            Console.WriteLine(reader["Username"].ToString());
            Console.WriteLine(reader["Item"].ToString());
            Console.WriteLine(reader["Amount"].ToString());
            Console.WriteLine(reader["Complete"].ToString());
        }
    }
}
19
abatishchev

Personnellement, j'écrirais une classe avec 4 propriétés (avec les noms et types correspondants), puis utiliserais "dapper" (http://code.google.com/p/dapper-dot-net/):

var data = connection.Query<Request>(
    "select * from Requests where Complete = 0").ToList();

Avec quelque chose comme:

public class Request {
    public string Username{get;set;}
    ...
    public bool Complete {get;set;}
}

Dapper est gratuit, simple, paramétré pour éviter les injections SQL et très rapide.

6
Marc Gravell

Je créerais un objet avec des propriétés qui contiennent ces valeurs, puis le ferais si nécessaire.

public class YourObjectName
{
   public string Username { get; set; }
   public string Item { get; set; }
   public string Amount { get; set; }
   public string Complete { get; set; }
}

YourObjectName a = new YourObjectName();
a.Username = Reader['Username'].ToString();
0
Dietpixel

je sais que c'est un peu tard, mais vous pouvez utiliser des variables de chaîne locales, ou un tableau de chaînes ou une liste, insérez les données dans la base de données puis appelez-les dans la ligne d'écriture de votre console.

0
Albert Laure