2012-11-01 63 views
1

我們對來自VB6的舊項目運行了一個轉換工具。SqlDataReader的擴展方法?

我們用Ado.Net代替OLEDB,用SqlDataReaders代替RecordSets。

但是轉換後的代碼總是做rs.Fields['FirstName']參考,這是我的猜測是rs['FirstName']與數據庫閱讀器(如RS現爲q SqlDataReader的。

而不是通過所有的代碼去的,是有辦法,我可以創建SqlDataReader的擴展方法,那麼這將利用「Fields['FieldName']

這是我目前的嘗試:?

public static class SqlUtils 
    { 
     public static object Fields(this SqlDataReader dataReader, string fieldname) 
     { 
      return dataReader[fieldname]; 
     } 
    } 

然而,這一點也適用:

Console.WriteLine(reader.Fields("First").ToString()); 

我需要處理:

Console.WriteLine(reader.Fields["First"].ToString()); 

注,[],而不是()。

+0

也許,如果不密封,你可以創建一個自定義的類繼承的DataReader和創建你自己的類索引。否則,我看不到任何選擇。 – Silvermind

+0

謝謝Silvermind - 雖然接受['fieldname']參數,但該方法看起來如何?我想這就是你所說的索引器 - 但我不確定那是什麼。 – Craig

+1

爲什麼不運行查找+替換? – cbp

回答

4

擴展方法實際上只是靜態方法。由於沒有「靜態索引器」,因此不能使用使用索引器語法的擴展方法。

+0

原則上,C#理論上可以支持這種語法,即使在他們實際上是靜態方法的範圍內,但你確實C#實際上並不支持它。 –

2

這種靜態的索引工作只是花花公子......

public static string GetDRItem(this IDataReader dr, string colName) 
{ 
    return dr[colName].ToString(); 
} 
+0

偉大的解決方案。你應該注意如何使用它(例如:'reader.GetDRItem(「First」);') – Svek