2012-05-15 84 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

相關問題