1

我们在一个来自 VB6 的旧项目上运行了一个转换工具。

我们用 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());

注意,[],而不是 ()。

4

2 回答 2

4

扩展方法实际上只是静态方法。由于没有“静态索引器”,因此您不能拥有使用索引器语法的扩展方法。

于 2012-11-01T01:07:50.507 回答
3

这个静态索引器工作得很好......

public static string GetDRItem(this IDataReader dr, string colName)
{
    return dr[colName].ToString();
}
于 2013-03-22T21:12:07.060 回答