Вы должны разыграть всех из них, а не вслепую, используя ToString()
:
date_ofbirth = (DateTime) dr["dateofbirth"];
Это "распакует" значение при необходимости.
Конечно, здесь проще использовать ORM или микро-ORM (например, "dapper") - тогда вы просто запускаете:
var user = connection.Query<User>("select * from Users where Id=@id",
new {id = 123}).First(); // (this is using "dapper")
где User
- это класс со свойствами, которые соответствуют определению таблицы, т.е.
public class User {
public string Surname {get;set;}
...
public DateTime DateOfBirth {get;set;}
}
Также; убедитесь, что вы прочитали о using
здесь, т.е.
using(SqlDataReader dr = cmd.ExecuteReader())
{
if (dr.Read()) {...etc...}
}
это даже более важно для соединений и т. Д., Но оно обеспечивает правильность ресурса Dispose()
d даже в случае ошибки. Это заменяет ваш код "init as null, установлен на null в конце" и имеет преимущество в том, что он действительно что-то делает; p