使用c# SQL Reader从SQL Server表中检索日期时间值

本文关键字:SQL 检索 日期 时间 Server Reader 使用 | 更新日期: 2023-09-27 18:03:56

我正在查询一个SQL Server表,以获得表中数据类型为datetime的值。

数据库中的条目是: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转换为字符串?

使用c# SQL Reader从SQL Server表中检索日期时间值

该列键入为日期时间,因此您必须使用GetDateTime方法调用检索它。

如果你想要所有的值都被检索为string,不管什么是正确的数据库类型,你可以用GetValueToString方法调用:

var item = reader.GetValue(reader.GetOrdinal(dbColumn)).ToString();

但是,您应该注意,当其中一个值是null时,它可能会抛出异常。要避免这种情况,请使用以下命令:

var value = reader.GetValue(reader.GetOrdinal(dbColumn));
var item = value == null ? string.Empty : value.ToString();