【发布时间】:2015-05-01 02:10:38
【问题描述】:
我知道这可能是个骗局,但我花了好几个小时寻找答案,但似乎找不到。
我目前正在创建一个检索音乐会数据的网络 API。
我有一个 SQL Server 表,其中包含开始日期和结束日期,两者都是 datetime2 类型。我以这种格式插入了日期,在查看数据库时它们不会引起任何问题:
2015-10-08T20:00:00.0000000+01:00
我的模特:
public class Concert
{
public int Id { get; set; }
public string Name { get; set; }
public int LocationId { get; set; }
[Column(TypeName = "DateTime2")]
public DateTime Start { get; set; }
[Column(TypeName = "DateTime2")]
public DateTime End { get; set; }
public string Description { get; set; }
public string Url { get; set; }
}
还有我在类中显示我的数据库数据的方法:
public List<Concert> getAll()
{
List<Concert> concerts = new List<Concert>();
SqlConnection connection = CasWebAPIdb.getConnection();
String selectAll = "SELECT ConcertId, ConcertName, ConcertLocationId FROM dbo.Concerts";
SqlCommand selectCommand = new SqlCommand(selectAll, connection);
try
{
connection.Open();
SqlDataReader reader = selectCommand.ExecuteReader();
var isoDateTimeFormat = CultureInfo.InvariantCulture.DateTimeFormat;
while (reader.Read())
{
//Debug.WriteLine("lol: " + reader["ConcertEnd"].GetType());
Concert concert = new Concert();
concert.Id = (int)reader["ConcertId"];
concert.Name = reader["ConcertName"].ToString();
concert.LocationId = (int)reader["ConcertLocationId"];
concert.Start = (DateTime)reader["ConcertStart"];
concert.End = (DateTime)reader["ConcertEnd"];
concerts.Add(concert);
}
}
catch (SqlException ex)
{
throw ex;
}
finally
{
connection.Close();
}
return concerts;
}
}
调试时出现此错误:
System.Data.dll 中出现“System.IndexOutOfRangeException”类型的异常,但未在用户代码中处理
我尝试了很多东西并遵循了很多示例和代码,但我似乎无法正确转换它。有人有想法吗?
解决方案
我忘记在查询中添加“concertStart”和“concertEnd”。 问题已解决,谢谢!
【问题讨论】:
-
你试过
Convert.ToDateTime(reader["ConcertStart"])而不是强制转换吗? -
进行强制转换或转换不会有太大的不同。你还没有具体说明问题是什么?它应该作为 SQL 的 DateTime 和 DateTime2 数据类型映射到 .NET 中的 Datetime
-
当您说您似乎无法正确转换它时,您是如何确定的?您期望的结果是什么,您会得到什么结果?
标签: c# sql-server datetime sqldatareader datetime2