这可能是一个基本的C#问题,但我是从C / C ++背景出发的。
我正在编写一个从Sql Server数据库中获取单个日期值的应用程序。我遇到的问题是,当数据库通过sqlcommand reader读取数据时,我收到一条错误消息:
“无法将'System.DateTime'类型的对象强制转换为'System.String'”
奇怪的是,GetString(0)似乎在运行时返回了DateTime。
但是,据我所知,我无法将表达式转换为DateTime。如何从表达式中获取DateTime对象,或将此表达式转换为c#字符串? 这是我的代码:
static public string GetSqlString(string SQLText)
{
string result = "";
SqlDataReader reader;
SqlConnection connection = new SqlConnection("Data Source=DEVDB\\SQLEXPRESS;" +
"Initial Catalog=TestDB;" +
"Trusted_Connection=Yes;");
using (connection) {
SqlCommand sqlcommand = connection.CreateCommand();
sqlcommand.CommandText = SQLText;
connection.Open();
reader = sqlcommand.ExecuteReader();
if (reader != null)
if (reader.Read())
{
// Code breaks on this Line
result = reader.GetString(0);
//////////////////////////////////////////////////////
// This doesn't seem to work either:
result = (DateTime)(reader.GetString(0)).ToShortDateString;
// Visual Studio states that this reader.GetString is a string,
// oddly enough...
}
else
{
// Purposely Bogus Value
result = "01/01/1920";
}
connection.Close();
}
return result;
}
static public DateTime GetCurrentDateDB()
{
string dateString;
dateString = GetSqlString("SELECT [ViewingDate] FROM [TestDB].[dbo].[AppGlobals] as varchar");
DateTime ComputedDate = DateTime.Parse(dateString);
return ComputedDate;
}
我的查询结果,来自SQL Server Managment Studio:
ViewingDate
2010-05-17 00:00:00.000
答案 0 :(得分:4)
GetString
是一种类型安全的方法,可以获得您知道的字符串。
使用GetValue(0)
获取可以投射到任何所需内容的对象。
如果您只是在寻找默认的字符串表示,请使用GetValue(0).ToString()
。
String.Format("{0:d}", reader.GetValue(0));
是另一种方法。
((DateTime)reader.GetValue(0)).ToShortDateString();
应与其他人建议的解决方案完全相同。 GetDateTime(0)调用为您执行强制转换。这就是你使用GetString得到错误的原因,因为它试图转换为String。
答案 1 :(得分:3)
我猜你想要result = reader.GetDateTime(0).ToShortDateString();
答案 2 :(得分:1)
你应该使用GetDateTime(0).ToString()。