5
using (var connection = new SqlConnection("user id=xxx;" +
                   "password=xxx;server=xxx;" +
                   "Trusted_Connection=yes;" +
                   "database=xxx; " +
                   "connection timeout=30"))
{
    connection.Open();
    string sql = "SELECT * FROM testTable";
    using (var command = new SqlCommand(sql, connection))
    {
        using (var reader = command.ExecuteReader())
        {
            while (reader.Read())
            {
                .
                .
                .
                .
                .
            } 
        }
    }
}

上面的代码可用于检索记录行列表并将它们显示在我的 C# 控制台应用程序中,但在 Main 方法中会非常混乱。我想知道如何处理这些记录块并通过调用方法将它们存储到列表或其他东西中。在 C# 控制台应用程序中是否有可能?

4

3 回答 3

30

不知道你的数据库表中有什么,我将举一个例子:

账户类:

public class Person
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public int Age { get; set; }
}

现在您可以让reader循环填充 each Person,如下所示:

while (reader.Read())
{
    var person = new Person();
    person.FirstName = reader["FirstName"].ToString();
    person.LastName = reader["LastName"].ToString();
    person.Age = Convert.ToInt32(reader["Age"]);
}

最后,我们要构建一个Person要返回的对象列表,如下所示:

var listOfPerson = new List<Person>();

while (reader.Read())
{
    var person = new Person();
    person.FirstName = reader["FirstName"].ToString();
    person.LastName = reader["LastName"].ToString();
    person.Age = Convert.ToInt32(reader["Age"]);

    listOfPerson.Add(person);
}

return listOfPerson;

完整代码:

public List<Person> LoadPeople()
{
    var listOfPerson = new List<Person>();

    using (var connection = new SqlConnection("user id=xxx;" +
               "password=xxx;server=xxx;" +
               "Trusted_Connection=yes;" +
               "database=xxx; " +
               "connection timeout=30"))
    {
        connection.Open();
        string sql = "SELECT * FROM testTable";
        using (var command = new SqlCommand(sql, connection))
        {
            using (var reader = command.ExecuteReader())
            {
                while (reader.Read())
                {
                    var person = new Person();
                    person.FirstName = reader["FirstName"].ToString();
                    person.LastName = reader["LastName"].ToString();
                    person.Age = Convert.ToInt32(reader["Age"]);

                    listOfPerson.Add(person);
                }
            }
        }
    }

    return listOfPerson;
}
于 2013-09-12T03:23:51.043 回答
1

您可以使用所需的属性创建自定义类,然后在每条记录中创建它的对象并将其添加到列表中。如果要打印 sql 语句中给出的任何结果,则可以执行以下操作。

using (var connection = new SqlConnection(connectionString))
using (var adapter = new SqlDataAdapter(sql, connection))
{
    DataTable dt = new DataTable();
    adapter.Fill(dt);
    foreach (DataRow row in dt.Rows)
    {
        Console.WriteLine("--- Row ---");
        foreach (var item in row.ItemArray) 
        {
            Console.Write("Item: "); 
            Console.WriteLine(item); 
        }
    }
}
于 2013-09-12T03:23:31.853 回答
1

Read() 方法读取您正在访问的数据(表),因此您可以将其保存到列表中。

这里我假设行中的数据是字符串

list<string> firstRow = new list<string>;
list<string> secondRow = new list<string>;

//in your while(reader.Read()) code . . . 

while (reader.Read())
            {
                firstRow.Add(reader[0].ToString());
                secondRow.Add(reader[1].ToString());
            } 

希望这可以帮助。

于 2013-09-12T03:30:55.697 回答