C# SqlDataReader进入列表-最快的方式

C# SqlDataReader进入列表-最快的方式,c#,ado.net,C#,Ado.net,当我从sql数据库中读取数据,并希望将所有项目添加到下面的列表(即:eonumlist)中时。我需要专门分配每个字段还是可以批量分配此数据?我这样做是为了一份报告,我想快速获取数据。也许我应该用数据集来代替。我有40多个字段要添加到报告中,并希望能够快速完成此操作。寻找建议 public static List<EngOrd> GetDistinctEONum() { List<EngOrd> eonumlist = new List<EngOrd>(

当我从sql数据库中读取数据,并希望将所有项目添加到下面的列表(即:eonumlist)中时。我需要专门分配每个字段还是可以批量分配此数据?我这样做是为了一份报告,我想快速获取数据。也许我应该用数据集来代替。我有40多个字段要添加到报告中,并希望能够快速完成此操作。寻找建议

public static List<EngOrd> GetDistinctEONum()
{
    List<EngOrd> eonumlist = new List<EngOrd>();
    SqlConnection cnn = SqlDB.GetConnection();
    string strsql = "select distinct eonum " +
        "from engord " +
        "union " +
        "select 'zALL' as eonum " +
        "order by eonum desc";
    SqlCommand cmd = new SqlCommand(strsql, cnn);
    try
    {
        cnn.Open();
        SqlDataReader reader = cmd.ExecuteReader();
        while (reader.Read())
        {
            EngOrd engord = new EngOrd();
            engord.EONum = reader["eonum"].ToString();
            engord.Name = reader["name"].ToString();
            engord.Address = reader["address"].ToString();
            eonumlist.Add(engord);
        }
        reader.Close();
    }
    catch (SqlException ex)
    {
        throw ex;
    }
    finally
    {
        cnn.Close();
    }
    return eonumlist;                
}

将数据存储为xml,然后将xml反序列化到列表中

我做了类似的事情,将数据库中的数据存储到组合框中

为此,我使用以下代码

 public static void FillDropDownList(System.Windows.Forms.ComboBox cboMethodName, String myDSN, String myServer)
        {
            SqlDataReader myReader;
            String ConnectionString = "Server="+myServer+"\\sql2008r2;Database="+myDSN+";Trusted_Connection=True;";

            using (SqlConnection cn = new SqlConnection(ConnectionString))
            {
                cn.Open();
                try
                {
                    SqlCommand cmd = new SqlCommand("select * from tablename", cn);
                    using (myReader = cmd.ExecuteReader())
                    {
                        while (myReader.Read())
                        {
                            cboMethodName.Items.Add(myReader.GetValue(0).ToString());
                        }
                    }
                }
                catch (SqlException e)
                {
                    MessageBox.Show(e.ToString());
                    return;
                }
            }
        }
这将连接到数据库并读取表的每条记录,并将列0 Name中的值添加到组合框中


我认为您可以通过列表执行类似的操作,确保索引值正确。

当您说“快速”时,您指的是编码时间还是执行时间?为什么您捕捉到异常,却再次抛出?为什么要显式关闭连接,而不仅仅是使用using语句?理想情况下,对命令和数据读取器也使用using语句。旁注:熟悉using语句和重试异常。快速-就编码时间而言,摆脱catch子句。你只是把异常堆栈跟踪搞砸了。我不熟悉using语句。你能简单地举个例子吗。否则,我会做一些搜索。谢谢。那人很快就要了。为什么要构建规范化的数据表?获取对象列表[list]并将其序列化为字符串。把那根绳子保存起来。当您再次需要列表时,请从数据库中获取字符串并进行反序列化。您可以使用此方法来管理几十个复杂对象的列表,这些对象的列表不太可能以指数形式增长。一旦您构建了数据访问方法,以便能够根据类型的ID存储xml字符串(我使用一个简单的枚举),您就可以创建一个新的自定义对象,创建和填充列表,并在几分钟内存储和检索它。这是一个混合应用程序层的悲惨例子。不要这样做。