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
相关产品推荐
相关产品推荐

