Есть функция, которая делает запрос к БД, в результате чего возвращает объект класса DataTable, который содержит результат запроса в удобном формате (список строк, каждая из которых содержит список столбцов). Каждая ячейка имеет тип FieldPair, в котором содержится название столбца и собственно его значение. Самое интересное, что мы изначально не может знать тип столбца БД, поэтому FieldPair.Valueимеет тип Object, чтобы можно было хранить в ней значения и string, и int. Однако, я заметил, что в отладчике тип этой переменной выглядит как "
object (int/string)
", в связи с чем возникает вопрос : возможно ли как-то использовать переменную Name сразу как string или допустим int без постоянного приведения типов (вроде
(int)DataTable.Rows[i].Field[j]
) ?
public class FieldPair
{
public string Name;
public object value;
public FieldPair(string _name, object _value)
{
Name = _name;
value = _value;
}
}
private static DataTable Query(OleDbConnection dbConnect, OleDbCommand dbCommand, string sqlQuery, params Object[] values)
{
DataTable qResult = new DataTable();
dbConnect.Open();
dbCommand.CommandText = sqlQuery;
genParamCollection(dbCommand, sqlQuery, values);
OleDbDataReader reader = dbCommand.ExecuteReader();
while (reader.Read())
{
Row tmpRow = new Row();
for (int i = 0; i < reader.FieldCount; i++)
{
tmpRow.Fields.Add(new FieldPair(reader.GetName(i), reader[i]));
}
qResult.Rows.Add(tmpRow);
}
reader.Close();
dbCommand.Parameters.Clear();
dbConnect.Close();
return qResult;
}