Получить значение даты и времени из таблицы SQL Server с помощью C # Sql Reader

1

Я запрашиваю таблицу 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 в строку?

Теги:
sql-server
datetime

1 ответ

4
Лучший ответ

Этот столбец 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();
  • 0
    Если это решение, вам нужно изменить имя вашей функции на CustomSQLQueryThatOnlyDealsWithADateColumn
  • 0
    Использование GetValue позволит вам иметь дело со всеми типами и возвращает строковое представление значения.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню