Конвертация строки в тип определенный классом Type
Я хочу добавлять в базу данных определенный объект(названия полей этого объекта совпадают с названиями в таблице базы данных). для этого сделал метод ниже:
public void InsertData<T>(T newItem, string dataTable)
where T : IInfo
{
string[] data = newItem.Info;
var propertysInfo = GetPropertyInfos(newItem);
StringBuilder firstPartOfCommand = new StringBuilder();
StringBuilder secondPartOfCommand = new StringBuilder();
foreach (var propertyName in propertysInfo.Select(prop => prop.Name))
{
firstPartOfCommand.Append(propertyName + ",");
secondPartOfCommand.AppendFormat("@{0},", propertyName);
}
firstPartOfCommand.Remove(firstPartOfCommand.Length - 1, 1);
secondPartOfCommand.Remove(firstPartOfCommand.Length - 1, 1);
SqlCommand command = new SqlCommand($"INSERT INTO {dataTable} ({firstPartOfCommand}) VALUES ({secondPartOfCommand})", _connection);
int indexOfData = 0;
foreach (var property in propertysInfo)
{
object tempDatum = Convert.ChangeType(data[indexOfData++], property.PropertyType);
command.Parameters.AddWithValue(property.Name, tempDatum);
}
command.ExecuteNonQuery();
}
в теории, он должен получать объект и название таблицы, создавать sql команду исходя из свойств объекта, после этого записывать его в базу данных, приводя строку к типу поля используя
Convert.ChangeType(data[indexOfData++], property.PropertyType);
но проблема в том, что таким образом у меня не переводится TimeSpan с ошибкой: Недопустимое приведение "System.String" к "System.TimeSpan".
А также bool хоть и переводится на моменте "экзекуции" выдает ошибку.
Конечно можно написать кучу ифов и переводить с помощью parce но мне кажется, что есть более элегантное решение.
update Вспомнил, что в строке с временем TimeSpan у меня немного обрезанное время (без секунд), возможно исправив это первой ошибки не будет, но все же остается вторая.