新的OLEDB驱动程序(MSOLEDBSQL)无法在sql server中存储datetime(.fff)的一小部分

问题描述 投票:1回答:1

我正在使用带有c#的dot net应用程序。因为我想禁用TLS 1.0。我必须将旧的OLEDB驱动程序更改为新的(MSOLEDBSQL)。

但问题是当我要将日期值以毫秒存储到sql server中时。新的司机店只有yyyy-mm-dd HH:MM:SS。我想要yyyy-mm-dd HH:MM:SS.fff

我正在尝试下面的代码

OleDbCommand cmd = new OleDbCommand(query, m_conn, m_trans);
DataTable table = new DataTable();
DateTime dt = Convert.ToDateTime("2015-03-23 11:22:33.123");
OleDbParameter param = new OleDbParameter("", OleDbType.Date);
param.Value = dt;
param.Size = 16;
param.Precision = 23;
param.Scale = 3;
cmd.Parameters.Add(param);
cmd.CommandType = CommandType.StoredProcedure;

OleDbDataAdapter da = new OleDbDataAdapter(cmd);
da.Fill(table);
da.Dispose();
cmd.Dispose();

是新驱动程序省略datetime的一小部分?如果我想以毫秒为单位存储日期,需要进行哪些更改。

c# sql-server datetime oledb
1个回答
0
投票

我们遇到类似的问题,我们使用新的MSOLEDBSQL驱动程序在连接字符串中有'DataTypeCompatibility=80'。此更改与未明确指定比例相结合会导致秒数以及派系秒数被截断。

因此,表示为的值

'1994-08-21 21:21:36.123'

将被保存为

'1994-08-21 21:21:00.000'

但是,在您的情况下,您是否尝试将参数的OLE DB类型更改为DBTimeStamp?

客户端到服务器从Date类型转换为DbTimeStamp(datetime / datetime2)似乎使用以下逻辑(https://docs.microsoft.com/en-us/sql/connect/oledb/ole-db-date-time/conversions-performed-from-client-to-server?view=sql-server-2017):

保留SQL Server 2008之前的DBTYPE_DATE转换语义。小数秒被截断为零。

© www.soinside.com 2019 - 2024. All rights reserved.