Я запрашиваю таблицу SQL Server, чтобы получить значение, относящееся к datetime
времени datatype в таблице.
Элемент в базе данных: 2014-05-17 23:52:09.333
Следующий код генерирует это исключение:
Невозможно передать объект типа "System.DateTime" для ввода "System.String".
Код:
internal List<string> CustomSqlQuery(string dbName, string dbTable, string dbColumn, string query, string connString)
{
var databaseItems = new List<string>();
var conn = new SqlConnection(connString);
var cmd = new SqlCommand(query, conn);
try
{
using (cmd)
{
conn.Open();
var reader = cmd.ExecuteReader();
if (reader.HasRows)
{
while (reader.Read())
{
// exception thrown on the following line
// Unable to cast object of type 'System.DateTime' to type 'System.String'.
var item = reader.GetString(reader.GetOrdinal(dbColumn));
databaseItems.Add(item);
}
}
}
conn.Close();
}
catch (Exception exception)
{
Logger.Log(Loglevel.Error, "Boom: {0}", exception.Message);
return null;
}
return databaseItems;
}
Как преобразовать datetime
в строку?
Этот столбец GetDateTime
время, поэтому вам нужно получить его с помощью GetDateTime
метода GetDateTime
.
Если вы хотите, чтобы все значения были получены в виде string
, неважно, какой именно тип в базе данных, вы можете сделать это с помощью метода GetValue
и ToString
:
var item = reader.GetValue(reader.GetOrdinal(dbColumn)).ToString();
Однако вы должны знать, что это может вызвать исключение, когда одно из значений равно null
. Чтобы этого избежать, используйте следующее:
var value = reader.GetValue(reader.GetOrdinal(dbColumn));
var item = value == null ? string.Empty : value.ToString();
GetValue
позволит вам иметь дело со всеми типами и возвращает строковое представление значения.