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

API接口数据映射问题:从数据库取数并映射至Model

解决数据库Schema与Model映射及数据返回问题

你遇到的核心问题很明确——Model类中的Map_Data_ID字段定义为string类型,但数据库里该字段是整数类型,同时Controller中读取数据时直接用GetInt32获取值,这就造成了类型不匹配,导致映射失败。下面是具体的解决步骤和优化建议:

1. 修正Model字段类型,匹配数据库Schema

首先要把Map类里的Map_Data_ID类型从string改为int,和数据库字段类型保持一致:

public class Map {
    public int Map_Data_ID { get; set; }
    public string County { get; set; }
    public string Color { get; set; }
}

2. 优化数据读取逻辑,增加空值处理

直接使用GetInt32或GetString读取数据时,如果数据库字段存在NULL值会抛出异常,建议加入空值判断逻辑,提升代码健壮性:

while (reader.Read()) {
    var map = new Map();
    
    // 处理Map_Data_ID:先判断是否为NULL,再读取值
    int mapDataIdOrdinal = reader.GetOrdinal("Map_Data_ID");
    if (!reader.IsDBNull(mapDataIdOrdinal)) {
        map.Map_Data_ID = reader.GetInt32(mapDataIdOrdinal);
    }
    
    // 处理County字段
    int countyOrdinal = reader.GetOrdinal("County");
    if (!reader.IsDBNull(countyOrdinal)) {
        map.County = reader.GetString(countyOrdinal);
    }
    
    // 处理Color字段
    int colorOrdinal = reader.GetOrdinal("Color");
    if (!reader.IsDBNull(colorOrdinal)) {
        map.Color = reader.GetString(colorOrdinal);
    }
    
    maps.Add(map);
}

3. 建议:避免硬编码连接字符串,改用配置文件

当前代码里硬编码了数据库连接信息,既不安全也不便于后续维护。推荐把连接字符串放到配置文件中:

如果你使用的是ASP.NET Framework(Web.config):

<connectionStrings>
    <add 
        name="HCTDatabase" 
        connectionString="Data Source=34.255.206.221;Initial Catalog=HCT;User ID=user;Password=pass;" 
        providerName="System.Data.SqlClient" 
    />
</connectionStrings>

然后在Controller中读取:

string connString = ConfigurationManager.ConnectionStrings["HCTDatabase"].ConnectionString;

4. 验证最终返回结果

完成上述修改后,重新调用GetAllProducts接口,就能得到你期望的JSON格式:

[
    { "Map_Data_ID": 122, "County": "West Yorkshire", "Color": "#d45faa" },
    { "Map_Data_ID": 167, "County": "Wiltshire", "Color": "#d45faa" }
]

内容的提问来源于stack exchange,提问作者ashley g

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:55:31