c# - 将带毫秒的 DateTime 插入 SQL Server

标签 c# sql-server datetime npoco

两周前我开始了一个新的 ASP.NET MVC 项目。我正在使用微型 ORM NPoco,我喜欢它!

在测试期间,我在将 DateTime 属性保存到 SQL Server 2014 Express 时遇到了问题。

当我尝试插入 DateTime00:03:28.385 时,它在数据库中保存为 00:03:28.387。数据库列类型是 time(7)。我试过 datetime2(7) 结果总是一样 -> 00:03:28.387

然后我尝试了普通的 System.Data.SqlClient:

var insert = "insert into Foo(time) values (@time)";
var conn = new SqlConnection(@"conntionString");
conn.Open();
var cmd = new SqlCommand(insertString.ToString(), _conn);
cmd.Parameters.AddWithValue("@Time",  DateTime.ParseExact("00:03:28.385", "HH:mm:ss.fff", CultureInfo.InvariantCulture));
cmd.ExecuteNonQuery();

结果是一样的:00:03:28.387

将时间作为字符串插入时会起作用。

insert into Foo(time) values ('00:03:28.385')

所以这不是 NPoco 的问题。

最佳答案

如果您正确地为您的 SqlCommand 指定参数,它工作得很好:

string connStr = "server=.;database=Test;Integrated security=SSPI;";
string insertQry = "INSERT INTO dbo.Foo(time) VALUES(@Time);";

using (SqlConnection conn = new SqlConnection(connStr))
using (SqlCommand insertCmd = new SqlCommand(insertQry, conn))
{
    // use proper Parameters syntax - specify SqlDbType!
    insertCmd.Parameters.Add("@time", SqlDbType.Time).Value = TimeSpan.Parse("00:03:28.385");

    conn.Open();
    insertCmd.ExecuteNonQuery();
    conn.Close();
}

我认为 .AddParameterWithValue可能只是数据类型错误并使用SqlDbType.DateTime对应于 DATETIME在 SQL Server 中键入 - 它确实具有 3.33 毫秒的精度 - 因此对于该数据类型,.385 将“四舍五入”为 .387。

关于c# - 将带毫秒的 DateTime 插入 SQL Server,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31126625/

相关文章:

c# - PropertyInfo.SetValue 无法将字符串转换为 Decimal

c# - 不同 Controller 中的 OData 自定义路由约定

sql-server - 是否可以将全文搜索 (FTS) 与 LINQ 结合使用?

sql - 如何在 SQL Server 中将一个表列行分配给另一个表列值

Python:无法将字符串转换为日期

python - 创建一个新文件夹并将其作为 Selenium 中的默认下载

c# - 将引用传递给集合元素

C# SQL Server Coonnectivity - 持续连接(客户端 - 服务器

python - PySpark:将 "string-integer"列转换为 IntegerType

sql - 使用 Microsoft sql server 2012 遇到基本 SQL 问题