new SqlCommand($"SELECT * FROM {_schema}.{_tableName}", _
connection); using var reader = schemaCommand.ExecuteReader(CommandBehavior.SchemaOnly);
return reader.GetSchemaTable;
}
Модифицируйте конструктор, чтобы использовать SchemaTable
public MyDataReader(List
string schema, string tableName
{
...
DataTable schemaTable = GetSchemaTable;
for (int x = 0; x
{
DataRow col = schemaTable.Rows[x];
var columnName = col.Field
_nameDictionary.Add(x,columnName);
}
}
Теперь показанные далее методы могут быть реализованы обобщенным образом, используя полученную посредством рефлексии информацию:
public int FieldCount => _propertyInfos.Length;
public object GetValue(int i)
=> _propertyInfos
.First(x=>x.Name.Equals(_nameDictionary[i],
StringComparison.OrdinalIgnoreCase))
.GetValue(Records[_currentIndex]);
Для справки ниже приведены остальные методы, которые должны присутствовать (но не реализованы):
public string GetName(int i) => throw new NotImplementedException;
public int GetOrdinal(string name) => throw new NotImplementedException;
public string GetDataTypeName(int i) => throw new NotImplementedException;
public Type GetFieldType(int i) => throw new NotImplementedException;
public int GetValues(object[] values) => throw new NotImplementedException;
public bool GetBoolean(int i) => throw new NotImplementedException;
public byte GetByte(int i) => throw new NotImplementedException;
public long GetBytes(int i, long fieldOffset, byte[] buffer,
int bufferoffset, int length)
=> throw new NotImplementedException;
public char GetChar(int i) => throw new NotImplementedException;
public long GetChars(int i, long fieldoffset, char[] buffer,
int bufferoffset, int length)
=> throw new NotImplementedException;
public Guid GetGuid(int i) => throw new NotImplementedException;
public short GetInt16(int i) => throw new NotImplementedException;
public int GetInt32(int i) => throw new NotImplementedException;
public long GetInt64(int i) => throw new NotImplementedException;
public float GetFloat(int i) => throw new NotImplementedException;
public double GetDouble(int i) => throw new NotImplementedException;
public string GetString(int i) => throw new NotImplementedException;
public decimal GetDecimal(int i) => throw new NotImplementedException;
public DateTime GetDateTime(int i) => throw new NotImplementedException;
public IDataReader GetData(int i) => throw new NotImplementedException;
public bool IsDBNull(int i) => throw new NotImplementedException;
object IDataRecord.this[int i] => throw new NotImplementedException;
Бьёрн Страуструп , Ирина Сергеевна Козлова , Бьерн Страуструп , Валерий Федорович Альмухаметов
Программирование, программы, базы данных / Базы данных / Программирование / Учебная и научная литература / Образование и наука / Книги по IT