You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为DropDownList绑定数据源报错:System.Data.Common.DataRecordInternal无对应属性

错误原因

  • 把字段值误设为字段名
    你写的Year.DataTextField = reader["Name"].ToString();会读取当前行Name列的具体值(比如2021),并将这个值设置为DataTextField。绑定程序会以此为依据,去数据源里寻找名为"2021"的属性,自然找不到,这就是报错'System.Data.Common.DataRecordInternal' does not contain a property with the name '2021'的根本原因。DataTextField和DataValueField需要的是数据库表的列名字符串,而非列的具体内容。

  • 不必要的循环绑定
    SqlDataReader本身就是可直接绑定的数据源,不需要通过while(reader.Read())逐行循环。你在循环内重复设置数据源并执行绑定,不仅逻辑错误,还会导致重复操作,最终即便不报错,也只会显示最后一行数据。

修复后的完整代码

string query = @"SELECT Id, Name, Status FROM Period";

// 数据库连接字符串
string connectionString = "Data Source=TEST;Initial Catalog=Test1;Integrated Security=SSPI";

using (SqlConnection connection = new SqlConnection(connectionString))
{
    connection.Open();
    using (SqlCommand command = new SqlCommand(query, connection))
    {
        using (SqlDataReader reader = command.ExecuteReader())
        {
            // 直接将reader设为数据源
            Year.DataSource = reader;
            // 指定对应的列名字符串
            Year.DataTextField = "Name";
            Year.DataValueField = "Id";
            // 执行数据绑定
            Year.DataBind();
        }
    }
}

补充说明

如果需要筛选特定数据(比如仅启用状态的年份),直接在SQL语句中添加WHERE条件即可,例如:

SELECT Id, Name, Status FROM Period WHERE Status = 1

无需在代码中通过循环处理数据。

内容的提问来源于stack exchange,提问作者Mikhail Zhuikov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 12:20:05