将SQL语句的结果转换为列表

时间:2012-12-01 02:05:01

标签: c# sql

我试图将SQL语句的结果放入表单上的组合框中。我已经在网上搜索了一个答案,但我还能做得更远:

using (SqlCeConnection c = new SqlCeConnection(
 Properties.Settings.Default.CW2_DBConnectionString))
{
    c.Open();

    List<Visit> rows = new List<Visit>();

    SqlCeCommand cmd = c.CreateCommand();
    cmd.CommandText = "SELECT PICKUP_ID FROM PICKUP";

    c.Open();
    cmd.ExecuteNonQuery();

    SqlCeDataReader reader = cmd.ExecuteReader();

    while (reader.Read())
    {

    }

    cmbPickupID.Items.Add(rows);
}

我不确定在while循环中放入什么。我确实有类似的东西:

rows.Add(reader["PICKUP_ID"].ToString());

但显然它没有用。 Visit类已设置并获取VisitID。有没有人有任何想法?

3 个答案:

答案 0 :(得分:5)

首先关闭:您不需要cmd.ExecuteNonQuery();

其次:如果您的Visit类具有属性PICKUP_ID,并且您使用的是Visit项列表,那么您需要将实际Visits添加到列表中,而不仅仅是字符串,像这样:

rows.Add(new Visit () {pickupid = reader["PICKUP_ID"].ToString()});

如果你只需要id,那么你也可以只做一个List<string>。您发布的代码将起作用。

答案 1 :(得分:2)

摆脱cmd.ExecuteNonQuery();不需要它吗?

试试这个:

        while (reader.Read())
        {
            cmbPickupID.Items.Add(reader["PICKUP_ID"].ToString());
        }

答案 2 :(得分:1)

我可以使用Reflection和其他一些东西。

我建议您使用Dapper

您可以使用Dapper将一个查询的结果转换为一个类。

使用短小精灵这样做:

1:右键点击Visual studio中的项目,然后选择Manage Nuget Packages

2:在search Online文本框中输入Dapper。

3:在网上搜索此DLL后,您可以安装它。(您最常连接到互联网)。

4:创建Domain Class

   private class DomainClass
   {
        public int Id { get; set; }
        public string Name { get; set; }
        //public int Sex { get; set; }
        public SexEnum sex { get; set; }
   }

5:如果你有一些字段大多数转换为某个具有不同类型的字段(枚举类型)     喜欢Sex字段。

6:创建连接字符串和sqlConnection对象:

 var connectionStr = "Server=ArdalanShahgholiPC;Database=Dapper;User Id=sa;Password=sa;";
 SqlConnection sqlConn = new SqlConnection(connectionStr);

7:并且使用Dapper.SqlMapper执行并将查询转换为您的域类。

 IList<DomainClass> TestList = Dapper.SqlMapper.Query<DomainClass>(
                                sqlConn, "Select * From ATest").ToList();

最后,您可以使用TestList