1
DataTable _dt = new DataTable();

using (SqlConnection _cs = new SqlConnection("Data Source=COMNAME; Initial Catalog=DATABASE; Integrated Security=True"))
{
    string _query = "SELECT * FROM Doctor";
    SqlCommand _cmd = new SqlCommand(_query, _cs);

    using (SqlDataAdapter _da = new SqlDataAdapter(_cmd))
    {
        _da.Fill(_dt);
    }
}
cbDoctor.DataSource = _dt;
foreach(DataRow _dr in _dt.Rows)
{
    cbDoctor.Items.Add(_dr["name"].ToString());
}

有一个错误...

结果System.Data.DataRowView不是数据库中的数据..

4

3 回答 3

6

我还不确定您的代码中的确切错误是什么,但如果您可以不使用DataTable,您可以这样做:

using (SqlConnection sqlConnection = new SqlConnection("connstring"))
{
    SqlCommand sqlCmd = new SqlCommand("SELECT * FROM Doctor", sqlConnection);
    sqlConnection.Open();
    SqlDataReader sqlReader = sqlCmd.ExecuteReader();

    while (sqlReader.Read())
    {
        cbDoctor.Items.Add(sqlReader["name"].ToString());
    }

    sqlReader.Close();
}

有关更多信息,请查看MSDN 上的 SqlDataReader 参考

为了在您发布的原始代码中找到问题,请提供您在哪一行得到异常的信息(或者是阻止应用程序编译的错误?)以及它的全部信息是什么。

于 2012-10-15T16:59:25.040 回答
2

您还可以将组合框的 DisplayMember 属性指定为任何列名。例如,如果你想显示名称字段,你可以这样做

Combobox1.DisplayMember="Name";
于 2012-10-15T17:04:12.247 回答
0

我认为问题在于您试图将多列插入组合框(只能接受一列)。调整您的 SELECT 语句,使其将您需要的所有数据合并到一列中:

例子:

SELECT Name + ' ' LastName + ' '+ ID AS 'DoctorData' FROM Doctor

通过使用 + 运算符,您可以组合数据库中的多个列,并将其表示为单个数据。我认为您的代码应该在那之后工作(您甚至可以评论 foreach 循环,我认为将数据源添加到您的组合框就足够了)

于 2012-10-15T16:48:43.183 回答