描述:我有一些C#代码使用OLEDB在我的SAS服务器上创建一个新表:
"CREATE TABLE SASUSER." + tableName + " (time DATETIME, value NUM)";
然后它使用FOR循环从.NET DataSet
添加一些值。 time
是DateTime
个对象,而value
只是Double
。 :
"INSERT INTO SASUSER." + tableName + " (time, value) VALUES (" + time.Ticks + " , " + value + ")"
需要一些随机猜测才能发现时间列只接受数字 - 而不是典型的日期字符串(例如'06 / 26/11 13:24:11')。
问题:即使我将时间列指定为DATETIME,也只显示日期(mm / dd / yyyy) - 而不是时间。 e.x.如果我将'time.Ticks'替换为10或10.5,则将1/11/1960保存为时间值。它将这个数字解释为自1960年1月1日以来的天数,它应该将其解释为自1960年1月1日午夜以来的秒数。
注意:我正在将SASB与SAS的SAS.IOMProvider提供商一起使用。当我添加时间值时,我知道我必须将刻度转换为SAS刻度(自1960年1月1日午夜以来的秒数) - 我只是取出额外的计算以使其更容易阅读。
解决方法:我在SAS服务器上使用模板表,该表具有正确格式化的列。我只是制作该表的副本并将我的数据复制到模板副本中。这并不理想,但它可以作为快速解决方案。
答案 0 :(得分:0)
我不确定C#,因为我只熟悉VB。
在VB中: 插入表值('“& FORMAT(yourdatetime,”yyyy-MM-dd HH:mm:ss“)&”')
尝试参考here并将其修改为C#。
我只是猜测:INSERT INTO TABLE VALUES('“& String.Format(”{0:yyyy-MM-dd HH:mm:ss}“,yourdatetime)&”')