2014-09-12 2 views
1

У меня есть таблица базы данных SQL, созданная на Visual Studio. Теперь я хочу получить доступ к этой базе данных, прочитать ее значение на основе определенного столбца и сохранить это значение в списке со списком.Как получить данные с сервера sql и поместить в поле со списком с помощью C#?

Например, если у меня есть таблица вроде этого

|StudentName | Age | ID | 
|---------------|--------|-------| 
|A    | 19  | 1  | 
|---------------|--------|-------| 
|B    | 15  | 2  | 
|---------------|--------|-------| 
|C    | 20  | 3  | 
|---------------|--------|-------| 

и поле со списком с именем nameCombo, что я хочу, чтобы иметь что-то вроде этого

nameCombo.Items.Add(A); 
nameCombo.Items.Add(B); 
nameCombo.Items.Add(C); 

Как я собираюсь сделать это ? Благодарю.

EDIT

Предполагая, что вы уже подключения LINQ к вашей базе данных SQL. Вот что вам нужно сделать, чтобы обновить поле со списком. Все спасибо этим замечательным парням здесь, в stackoverflow.

locationLinqToSQLDataContext db = new locationLinqToSQLDataContext(); 
var nameData = from name in db.Locations 
       select new { name.StudentName }; 

foreach (var name in nameData) 
    { 
     fromTextBox.Items.Add(name.StudentName); 
    }    
+0

Можете ли вы использовать LINQ2SQL? – xsari3x

+0

@ xsari3x: да могу. –

+1

Решено там :) – xsari3x

ответ

3

Ok предполагая LINQ, то:

Query его в список.

var myData = (from d in db.MyTable 
       where d.Name.contains("A") 
       select d).ToList(); 

Затем назначьте его комбо:

mycombo.datasource=myData; 
mycombo.dataTextField="Name"; 
mycombo.dataValueField="ID"; 
mycombo.dataBind(); 

Просто сделал это на лету, но он должен работать.

ИЛИ Если вы действительно хотите перебирать элементы.

myData.foreach(delegate(MyTableItem i) 
{ 
    mycombo.add(new listitem(i.id,i.name)); 
}); 
+1

способ, которым вы это сделали, работает только с определенным элементом, который вы уже знаете в таблице (например, A). Мой вопрос, независимо от того, что находится в столбце name, будет запросом в списке. Есть ли лучший способ сделать это с Linq? –

+2

Это просто пример, вы можете так же легко сделать «A» переменной и сравнить ее с именем или любым другим полем. Казалось, что вопрос больше связан с привязкой данных. Если вы хотите выполнять многоколоночные динамические запросы, это еще одна проблема и связана с LINQ. Я бы взглянул на LINQ Kit, который позволит вам создавать динамические и хорошо типизированные запросы LINQ. – TechneWare

+1

спасибо, я наконец понял, как это сделать.Я отредактирую свой вопрос с ответом –

2

Если вам это нужно для окон формы заявки здесь код:

 DataTable dt = new DataTable("dataTable"); 

     dt.Columns.Add("Id", typeof(int)); 
     dt.Columns.Add("Name", typeof(string)); 
     //add DataRow 
     DataRow row = dt.NewRow(); 
     row["Id"] = 1; 
     row["Name"] = "One"; 

     dt.Rows.Add(row); 
     //assign to ComboBox 
     comboBox1.DataSource = dt; 
     comboBox1.DisplayMember = "Name"; 
     comboBox1.ValueMember = "Id"; 

Для веб-приложений, которые вы можете увидеть другой ответ

1

Вот решение, которое использует SqlConnection (наивно предполагает, что вам не требуется привязка данных). Конечно, вы должны заменить «YourConnectionString» и «YourTable» на реальные значения.

string connectionString = "YourConnectionString"; 
using (SqlConnection connection = new SqlConnection(connectionString)) 
{ 
    connection.Open(); 
    string query = "SELECT Name FROM YourTable"; 
    SqlCommand command = new SqlCommand(query, connection); 
    using (SqlDataReader reader = command.ExecuteReader()) 
    { 
     while (reader.Read()) 
     { 
      // "0" refers to the 0th column in the result set. 
      nameCombo.Items.Add(reader.GetString(0)); 
     } 
    } 
}