2013-06-12 19 views
1

我正在做一個貨幣轉換項目,現在我已經構建了一個小腳本來將轉換率和說明從我的數據庫中提取出來,但我似乎無法找到一種方法將變量(Rate)拉出來數據讀取器創建的字符串。如何從SqlDataReader中提取特定的變量?

這裏是代碼片段:

  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(); 
      } 

現在我想率變量,它是一個小數,而無需將其轉換或適配器(我在C#中新)推它。

tl; dr 我希望單獨使用「Rate:{0}」的輸出,以便我可以使用它來轉換貨幣。

任何想法?

回答

1

你試過

reader.ReadField<type>("fieldname") ? 

編輯:哇,我真不敢相信我忘了,這是不是SqlDataReader對象的一部分:對,我只是看着我的實現......代碼如下:

擴展:

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); 
} 

對不起有關混淆:)

+0

咦?這不是一個標準[SqlDataReader](http://msdn.microsoft.com/library/system.data.sqlclient.sqldatareader_methods.aspx)方法,是嗎?你爲此寫了一個擴展名嗎? – Corak

+0

我在想這個? –

+0

也許他的意思是[GetFieldValue ](http://msdn.microsoft.com/library/hh485652.aspx)。 – Corak

1

DataReader不會創建字符串。您可以撥打reader.GetDecimal(0)

相關問題