2012-05-15 80 views
2

该列表将会随着我的数据库中有多少项目而增长和缩小。如何使用SQL Server数据库中的值填充列表?

我需要填充列表而不是列表框。我知道我需要打开连接。

using (var conn = new SqlConnection(Properties.Settings.Default.DBConnectionString)) 
{ 
    using (var cmd = conn.CreateCommand()) 
    { 
     conn.Open(); 

     List<string> TagList = new List<string>(); 
     for (int i = 0; i < TagList.Count; i++) 
      TagList[i].Add("Data from database"); 

     cmd.ExecuteNonQuery(); 
    } 
} 

我真的不知道如何做到这一点,我敢肯定我在这里的方法看起来很错误,所以我真的需要帮助。

有人能告诉我我做错了什么吗?

回答

6
public IEnumerable<string> GetTagList() 
{ 
    using (var connection = new SqlConnection(Properties.Settings.Default.DBConnectionString)) 
    using (var cmd = connection.CreateCommand()) 
    { 
     connection.Open(); 
     cmd.CommandText = "select Tag from TagsTable"; // update select command accordingly 
     using (var reader = cmd.ExecuteReader()) 
     { 
      while (reader.Read()) 
      { 
       yield return reader.GetString(reader.GetOrdinal("Tag")); 
      } 
     } 
    } 
} 

,那么你可以把它叫做如下

List<string> tags = GetTagList().ToList(); 
+0

哦甜看起来不错,但“从TagsTable选择Tag”这是什么,就像一个存储precedure通话还是什么?或者它只是一个选择数据。所以如果我要说选择TagID(一列)从TblTags?那是什么? – Pomster

+0

@Pomster是的,它是选择语句。 – Damith

3

这会做,因为它是(如果我没有做任何错别字......)

private void LoadList() 
    { 
     List<string> tagsList = new List<string>(); 

     using (IDbConnection connection = new SqlConnection(Properties.Settings.Default.DBConnectionString)) 
     { 
      connection.Open();  

      using (IDbCommand command = connection.CreateCommand()) 
      { 
       command.CommandText = "SELECT TAGCOLUMN FROM TAGSTABLE"; 

       using (IDataReader reader = command.ExecuteReader()) 
       { 
        while (reader.Read()) 
        { 
         if (!reader.IsDBNull(0)) 
          tagsList.Add(reader.GetString(0)); 
        } 

        reader.Close(); 
       } 
      } 

      connection.Close(); 
     } 
    } 

编辑:

当然,您必须将select语句更改为数据库中正确的语句。 我只是用一个伪指令来告诉你要放什么。

3

我想和大家分享我的解决方案,希望可以帮助别人的未来:

public List<string> getFromDataBase() 
{ 
    List<string> result = new List<string>(); 
    SqlConnection con = new SqlConnection("connectionString"); 
    try { 
     con.Open(); 
     DataTable tap = new DataTable(); 
     new SqlDataAdapter(query, con).Fill(tap); 
     result = tap.Rows.OfType<DataRow>().Select(dr => dr.Field<string>("columnName")).ToList(); 
    } 
    catch (Exception) { 
      //Exception 
    } 
    finally { 
     if (con != null) 
      con.Close(); 
    } 
    return result; 
} 
+0

这是一个优雅的解决方案。谢谢。 – Rotondof

相关问题