我有一个由数据填充的类。并非所有数据类型都是字符串:
public class NDCContract
{
public string ndc_id { get; set; }
public string contract_num_val { get; set; }
public string quote_price { get; set; }
public string eff_dt { get; set; }
public string end_dt { get; set; }
public string discount_pct { get; set; }
public string rebate_pct { get; set; }
}
我有一个服务调用一个存储过程,通过JOIN返回这样的东西:
然后循环我的代码以填充列表:
var ndccont = new List<BusinessObjects.Models.NDCContract>();
while (reader.Read())
{
var item = new BusinessObjects.Models.NDCContract();
item.ndc_id = reader.GetString(0);
item.contract_num_val = reader.GetString(1);
item.quote_price = reader.GetString(2);
item.eff_dt = reader.GetString(3);
item.end_dt = reader.GetString(4);
item.discount_pct = reader.GetString(5);
item.rebate_pct = reader.GetString(6);
ndccont.Add(item);
}
在item.quote_price = reader.GetString(2);
行上,我收到错误:Unable to cast object of type 'System.Decimal' to type 'System.String'.
为什么当属性是字符串并且它作为字符串读入时我收到此错误?我该如何解决这个问题?
答案 0 :(得分:5)
只需使用Convert.ToString(reader.GetValue(i))
检索您的字段。
reader.GetString(int)
不执行任何类型转换。
如果您想提供自己的文化而不是当前文化,可以使用System.Globalization.CultureInfo类指定它:
// Note the second argument
string value = Convert.ToString(reader.GetValue(2), CultureInfo.GetCultureInfo("en-US"));
答案 1 :(得分:3)
正确声明您的模型。我不确定数据库中的数据类型是什么,但它们可能是这样的:
public class NDCContract
{
public string ndc_id { get; set; }
public string contract_num_val { get; set; }
public decimal quote_price { get; set; }
public DateTime eff_dt { get; set; }
public DateTime end_dt { get; set; }
public decimal discount_pct { get; set; }
public decimal rebate_pct { get; set; }
}
然后正确填充结构:
while (reader.Read())
{
var item = new BusinessObjects.Models.NDCContract();
item.ndc_id = reader.GetString(0);
item.contract_num_val = reader.GetString(1);
item.quote_price = reader.GetDecimal(2);
item.eff_dt = reader.GetDateTime(3);
item.end_dt = reader.GetDateTime(4);
item.discount_pct = reader.GetDecimal(5);
item.rebate_pct = reader.GetDecimal(6);
ndccont.Add(item);
}