今天从A表中读取一个DateTime类型的数据,然后写进另一个B表中,但是写的数据不能精确到后面的毫秒数,看了看代码中读取的DateTime变量。
看上图也有毫秒位,排除读A表的问题。
看看数据库里的内容:
真是日了狗了,毫秒部分哪去了????
后来找到问题所在了
String.Format("insert into [B].dbo.data_collection_database(name,create_time,time_from,time_to) values ({0},{1},{2},{3})",dbtime, firstDataTime, firstDataTime, lastDataTime)
我这样写的SQL语句,字符串化了,虽然可行,但是在DateTime ToString的时候会损失精度,知道这一点就找到问题所在了
使用带参的插入SQL语句就好了。
即:
String insertDataSQLCommand = "insert into [B].dbo.data_collection_database(name,create_time,time_from,time_to) values (@dbname,@firstDataTime,@firstDataTime,@lastDataTime)";
comm.CommandText = insertDataSQLCommand;
comm.Connection = conn;
SqlParameter[] Params =
{
new SqlParameter("@dbname",SqlDbType.VarChar) { Value=dbName},
new SqlParameter("@firstDataTime",SqlDbType.DateTime) { Value=firstDataTime},
new SqlParameter("@lastDataTime",SqlDbType.DateTime) { Value=lastDataTime}
};
comm.Parameters.AddRange(Params);
这样就好了
看毫秒出现了
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
此外在打印DateTime实例的时候需要注意,直接使用ToString()会忽略掉毫秒部分,下面方式可以避免。
dt.ToString("yyyy-MM-dd HH:mm:ss.fff")
Convert.ToDateTime((dt.ToString("yyyy-MM-dd HH:mm:ss.fffff")))