如何使SqlDataReader获得时间(7)类型变量
本文关键字:类型变量 时间 何使 SqlDataReader | 更新日期: 2023-09-27 18:02:49
我有一个这样的SQL Server表:
userID int
xCoordinate int
yCoordinate int
recordTime time(7)
itemId int
我想获得给定用户(现在假设是用户1)的所有记录时间。我使用了以下代码:
public static void something()
{
string stmt = "select * from GazeTable where id = " + 1 + " ;";
SqlConnection conn = GetConnection();
SqlCommand cmd = new SqlCommand(stmt, conn);
conn.Open();
using (var reader = cmd.ExecuteReader())
{
while (reader.Read())
{
Console.WriteLine(reader.GetDateTime(3));
}
}
conn.Close();
}
但是会抛出错误
类型为"System"的未处理异常。InvalidCastException' occurred in System.Data.dll
表示该赋值无效。
如何以("HH:mm:ss.ffff")的形式打印表中每个recordTime
的时间?
SQL类型Time(7)
相当于c#类型TimeSpan
而不是DateTime
,要获得DateTime
值,SQL类型必须为datetime
。
所以只需将代码改为TimeSpan而不是DateTime:
public static void something()
{
string stmt = "select * from GazeTable where id = " + 1 + " ;";
SqlConnection conn = GetConnection();
SqlCommand cmd = new SqlCommand(stmt, conn);
conn.Open();
using (var reader = cmd.ExecuteReader())
{
while (reader.Read())
{
Console.WriteLine(reader.GetTimeSpan(3));
}
}
conn.Close();
}
在我的脑海中,您可能需要使用这样的东西(尚未测试):
public static void something()
{
string stmt = "select * from GazeTable where id = " + 1 + " ;";
SqlConnection conn = GetConnection();
SqlCommand cmd = new SqlCommand(stmt, conn);
conn.Open();
using (var reader = cmd.ExecuteReader())
{
if (reader.HasRows)
{
while (reader.Read())
{
Console.WriteLine("{0}", ((SqlDataReader)reader).GetTimeSpan(3).ToString(@"dd'.hh':mm':ss':ff"));
}
}
else
{
Console.WriteLine("No rows found.");
}
}
conn.Close();
}
应该将time(7)列转换为时间跨度,不能直接转换为日期时间