我正在查询一个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
转换为字符串?
该列键入为日期时间,因此您必须使用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();