0

我在 SQL Server 2008 中使用 c#。我正在创建一个项目,我想在其中从数据库中读取多个日期。这些日期一一存储在单个列中。并且检索到的数据应该被添加到一个列表中。

我的代码是这样的:

public List<DateTime> getholidays()
{
    DataTable table = new DataTable("holidays");

    SqlCommand command = new SqlCommand();
    command.Connection = conn;
    command.CommandType = System.Data.CommandType.Text;
    command.CommandText = "select holiday from holidays";

    //conn.Open();
    SqlDataAdapter adapter = new SqlDataAdapter(command);
    adapter.Fill(table);

    List<DateTime> list=new List<DateTime>();

    foreach (DataRow row in table.Rows)
    {
        DateTime dt = new DateTime();
        dt = Convert.ToDateTime(row["holiday"]);
        list.Add(dt);
    }

    conn.Close();
    return list;
}
4

2 回答 2

2

为了关闭和传播良好实践,您不需要在填充 DataTable 之前清除它,因为它是一个新对象。事实上,如果您使用 DataReader,您甚至根本不需要 DataTable。以下是我将如何实现您的代码:

List<DateTime> dates = new List<DateTime>();

using(SqlCommand cmd = new SqlCommand("SELECT holiday FROM holidays1", conn))
using(SqlDataReader rdr = cmd.ExecuteReader()) {

    while( rdr.Read() ) {

        dates.Add( rdr.GetDateTime(0) );
    }
}

return dates;

更短、更简单、更快。

于 2013-01-22T20:24:27.557 回答
0

我为我的问题找到了解决方案。谢谢大家。这是我的新代码

DataTable dt = new DataTable();
        List<DateTime> list = new List<DateTime>();

        SqlCommand cmd = new SqlCommand("select holiday from holidays1", conn);
        SqlDataAdapter da;
        da = new SqlDataAdapter(cmd);
        dt.Clear();
        da.Fill(dt);
        for (int i = 0; i < dt.Rows.Count - 1; i++)
        {
            list.Add(Convert.ToDateTime(dt.Rows[i][0]));
        }
        return list;
于 2013-01-22T07:48:20.943 回答