【发布时间】:2014-08-15 16:57:46
【问题描述】:
我想使用 C# 秒表将经过的时间插入 SQL Server,以便我们可以使用 SQL 脚本平均时间。
var stopwatch = new Stopwatch();
stopwatch.Start();
stopwatch.Stop();
var elapsedTime = stopwatch.Elapsed;
我是这样插入时间的……
cmd.Parameters.Add("@ElapsedTime", SqlDbType.Time);
数据库中的数据类型是...
ElapsedTime(time(7),null)
收到此错误...
SqlDateTime overflow. Must be between 1/1/1753 12:00:00 AM and 12/31/9999 11:59:59 PM.
我只想像这样在数据库中插入经过的时间...
00:01:44.9383728
这是我将如何放入数据库...
internal bool TimesToSql(TimeSpan elapsedTime)
{
try
{
const string statement = "INSERT INTO Database.dbo.TestProgress(MachineName, ElapsedTime) " +
"VALUES(@MachineName, @ElapsedTime)";
var conn = new SqlConnection(ConnectionStringLocalDb());
var cmd = new SqlCommand(statement, conn);
var machineName = Environment.MachineName;
cmd.Parameters.Add("@MachineName", SqlDbType.NVarChar);
cmd.Parameters.Add("@ElapsedTime", SqlDbType.Time);
//
cmd.Parameters["@MachineName"].Value = Environment.MachineName;
cmd.Parameters["@ElapsedTime"].Value = elapsedTime;
conn.Open();
cmd.ExecuteNonQuery();
conn.Close();
return true;
}
catch (Exception exception)
{
_logger.Log(Loglevel.Error, "Boom: {0}", exception.Message);
return false;
}
}
最终目标是从假设 x 的经过时间中获取平均时间,如果我可以使用字符串做到这一点,那么我会将它们格式化为字符串
【问题讨论】:
-
为什么将类型设为
time(7)?那是一天中的某个时间,而不是经过的时间。 (尽管您的错误消息有点令人困惑。)您在哪里为参数指定 value?如果我们能看到更多代码会有所帮助... -
@Jon 它应该只是一个 int 不是吗?
-
好吧,看起来 SQL Server 并没有真正拥有一种映射到 TimeSpan 的类型。您可能想要存储多个刻度。但它抱怨 SqlDateTime 溢出的事实向我表明,它甚至可能不是这个参数。你能想出一个简短但完整的程序来演示这个问题吗?你的 SQL 是什么样的?
-
@JonSkeet 我添加了将时间插入表中的 SQL 代码
-
What is the best way to represent a timespan in SQL Server CE? 的可能重复项(与非 ce 完全相关)。