我正在进行货币转换项目,现在我已经构建了一个小脚本来从我的数据库中提取转换率和描述,但我似乎无法找到一种方法来拉动变量(Rate)超出了datareader创建的字符串。
以下是代码段:
if (reader.HasRows)
//The reader will only read the rows if the ISO code matches the options avalible within the DB
{
Console.WriteLine("Result Found!");
while (reader.Read())
{
Console.WriteLine("Rate: {0}\t Conversion Rate: {1}",
reader[0], reader[1]);
}
reader.Close();
}
现在我想要一个十进制的Rate变量,而不必将其转换或推送到适配器中(我是C#的新手)。
TL;博士 我希望单独输出“Rate:{0}”,以便我可以用它来转换货币。
有什么想法吗?
答案 0 :(得分:1)
DataReader不会创建字符串。
您可以拨打reader.GetDecimal(0)
。
答案 1 :(得分:1)
你试过吗
reader.ReadField<type>("fieldname") ?
编辑:哇,我不敢相信我忘记了这不是SqlDataReader的一部分:p,我只是看着我的实现...代码:
扩展:
public static T ReadField<T>(this IDataReader reader, String fieldname)
{
return DB.ReaderField<T>(reader, fieldname);
}
DB.ReaderField:
public static T ReaderField<T>(IDataReader reader, String fieldname)
{
try
{
int idx = reader.GetOrdinal(fieldname);
if (reader.IsDBNull(idx))
{
return (T)default(T);
}
else
{
object o = reader.GetValue(idx);
try
{
return (T)Convert.ChangeType(o, typeof(T));
}
catch
{
return (T)default(T);
}
}
}
catch { }
return (T)default(T);
}
对于这种困惑感到抱歉:)