Подтвердить что ты не робот

Чтение значений из базы данных SQL в С#

Я только что начал изучать С#, и я могу без проблем записывать данные в базу данных. Но у меня проблемы с чтением, SQL выполняется отлично, но у меня проблемы с его хранением. Как я могу сохранить четыре столбца, которые должны быть возвращены, а затем показать их как окно сообщения? Спасибо.

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());
4b9b3361

Ответ 1

Одной из проблем является отсутствие скобок после while

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

если вы пропустите фигурные скобки, только первая строка будет обработана в каждом цикле, остальные будут обработаны после цикла, а затем myReader пройдены последние строки.

Ответ 2

Не забудьте использовать блок 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());
        }
    }
}

Ответ 3

Лично я бы написал класс с 4 свойствами (с соответствующими именами и типами), затем используйте "dapper" (http://code.google.com/p/dapper-dot-net/):

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

С чем-то вроде:

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

Dapper свободен, прост, имеет параметризацию, чтобы избежать SQL-инъекции, и очень быстро.

Ответ 4

Я бы создал объект со свойствами, который хранит эти значения, а затем передаст этот объект по мере необходимости.

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

Ответ 5

Я знаю его немного поздно, но вы можете использовать локальные строковые переменные или строковый массив или список, вставляя данные в базу данных, а затем вызывайте его в своей строке записи консоли