如何使用C#从sql server检索数据并将其放入组合框?

如何使用C#从sql server检索数据并将其放入组合框?,c#,C#,我在VisualStudio上创建了一个SQL数据库表。现在我想访问该数据库,根据某一列读取其值,并将这些值保存到组合框列表中 例如,如果我有一张这样的桌子 |StudentName | Age | ID | |---------------|--------|-------| |A | 19 | 1 | |---------------|--------|-------| |B | 15 | 2

我在VisualStudio上创建了一个SQL数据库表。现在我想访问该数据库,根据某一列读取其值,并将这些值保存到组合框列表中

例如,如果我有一张这样的桌子

|StudentName    | Age    | ID    |
|---------------|--------|-------|
|A              | 19     | 1     |
|---------------|--------|-------|
|B              | 15     | 2     |
|---------------|--------|-------|
|C              | 20     | 3     |
|---------------|--------|-------|
nameCombo.Items.Add(A);
nameCombo.Items.Add(B);
nameCombo.Items.Add(C);
还有一个名为nameCombo的组合框,我想要的是像这样的东西

|StudentName    | Age    | ID    |
|---------------|--------|-------|
|A              | 19     | 1     |
|---------------|--------|-------|
|B              | 15     | 2     |
|---------------|--------|-------|
|C              | 20     | 3     |
|---------------|--------|-------|
nameCombo.Items.Add(A);
nameCombo.Items.Add(B);
nameCombo.Items.Add(C);
我该怎么做?谢谢

编辑

假设您已经将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);
    }            
好的,假设LINQ,那么:

将其查询到列表中

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));
});
好的,假设LINQ,那么:

将其查询到列表中

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));
});

如果windows窗体应用程序需要它,请参阅以下代码:

       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";

对于web应用程序,如果windows窗体应用程序需要,您可以查看其他答案。以下是代码:

       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";

对于web应用程序,您可以看到另一个答案

这里有一个使用
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));
        }
    }
}

下面是一个使用
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));
        }
    }
}

您可以使用LINQ2SQL吗?@xsari3x:是的,我可以。在下面解决:)通常当您有下拉列表时,您希望存储这两个值,以编程方式标识数据,并显示对用户有意义的数据。您至少应将ID设置为要显示的值和学生姓名。否则,当有人选择值时,您将被迫搜索字符串studentName。或者,您可以将整个对象存储在下拉列表中,当他们选择值时,您就可以使用它,将行程保存到数据库。您可以使用LINQ2SQL吗?@xsari3x:可以。在下面解决:)通常当您有下拉列表时,您希望存储这两个值以编程方式标识数据并显示对用户有意义的数据。您至少应将ID设置为要显示的值和学生姓名。否则,当有人选择值时,您将被迫搜索字符串studentName。或者,您可以将整个对象存储在下拉列表中,当他们选择值时,您就可以使用它,并将行程保存到DB。您这样做的方式仅适用于表中已知的某个元素(例如a)。我的问题是,无论名称列中是什么,它都将被查询到一个列表中。使用Linq有更好的方法吗?这只是一个例子,您可以很容易地将“a”作为变量,并将其与名称或任何其他字段进行比较。似乎这个问题更多地与数据绑定有关。如果您想进行多列动态查询,这是另一个问题,并且与LINQ相关。我想看看LINQ工具包,它可以让您构建动态的、类型良好的LINQ查询。谢谢,我终于找到了实现方法。我将用答案编辑我的问题,就像您只对表中已知的某个元素(例如a)有效一样。我的问题是,无论名称列中是什么,它都将被查询到一个列表中。使用Linq有更好的方法吗?这只是一个例子,您可以很容易地将“a”作为变量,并将其与名称或任何其他字段进行比较。似乎这个问题更多地与数据绑定有关。如果您想进行多列动态查询,这是另一个问题,并且与LINQ相关。我想看看LINQ工具包,它可以让您构建动态的、类型良好的LINQ查询。谢谢,我终于找到了实现方法。我将用答案编辑我的问题