項(xiàng)目中遇到一個(gè)轉(zhuǎn)換FileTime的問題.時(shí)間是在C#中用DateTime.ToFileTime寫入數(shù)據(jù)庫中,這在存儲(chǔ)過程中判斷年和季度成了問題,怎么樣才能把時(shí)間轉(zhuǎn)換為正常的時(shí)間格式呢?Sql server中又沒有FromFileTime對(duì)應(yīng)的方法?其實(shí)很簡單用C#寫一個(gè)轉(zhuǎn)換時(shí)間的Dll然后在存儲(chǔ)過程中調(diào)用就可以了.
轉(zhuǎn)換時(shí)間的類如下:
[Guid("729ba6af-3eff-4b75-b43b-d951a190dbe6")]
public class FileTimeConvert
{
?? public FileTimeConvert()
?? {
?? }
?? public string ConvertTime(long fileTime)
?? {
??? string retVal = string.Empty;
??? if (fileTime > 0)
??? {
???? DateTime dt = DateTime.FromFileTime(fileTime);
???? retVal = dt.ToString();???
??? }
??? return retVal;
?? }?
}
注意這個(gè)Guid我們?cè)诖鎯?chǔ)過程中引用要用到這個(gè)Guid.
為方便可能在多處需要調(diào)用,我們專門寫一個(gè)存儲(chǔ)過程
如下:
CREATE PROCEDURE spu_ConvertFileTimeToNormal
@ticks BIGINT,
@returnval varchar(40) output
AS
DECLARE @src varchar(255)
DECLARE @desc varchar(255)
DECLARE @object int
DECLARE @hr int
EXEC @hr = sp_OACreate '{729ba6af-3eff-4b75-b43b-d951a190dbe6}',@object OUT
IF @hr = 0 --如果創(chuàng)建對(duì)象成功
BEGIN
?? EXEC @hr = sp_OAMethod @object,'ConvertTime',@returnval OUT,@ticks
???? print @returnval
???? print @hr
?? if(@hr <> 0)
??? BEGIN
????? EXEC sp_OAGetErrorInfo @object, @src OUT, @desc OUT
???? SELECT hr=convert(varbinary(4),@hr), Source=@src, Description=@desc
??? END
??
?? END
ELSE
BEGIN
?? --print @hr
?? print 'Create Object ConvertTime failed'
???? EXEC sp_OAGetErrorInfo @object, @src OUT, @desc OUT
???? SELECT hr=convert(varbinary(4),@hr), Source=@src, Description=@desc
???? RETURN
END
EXEC @hr = sp_OADestroy @object
IF @hr <> 0
BEGIN
??? EXEC sp_OAGetErrorInfo @object
??? RETURN
END
GO
這個(gè)時(shí)候我們還差最后一步注冊(cè)DLL了
在.net 命令行下輸入 regasm -codebase path
好了,現(xiàn)在我們就可以在其他存儲(chǔ)過程中調(diào)用這個(gè)存儲(chǔ)過程返回正常的時(shí)間了.
給個(gè)小例子:
EXEC spu_ConvertFileTimeToNormal @CreateTime,@NormalTime OUT???
@CreateTime:FileTime格式
@NormalTime :正常的時(shí)間格式字符串(spu_ConvertFileTimeToNormal 存儲(chǔ)過程返回值)
這個(gè)簡單的小例子說明了我們?cè)趺礃釉诖鎯?chǔ)過程中調(diào)用DLL
是不是你解決問題又多了一個(gè)選擇了呢?
轉(zhuǎn)換時(shí)間的類如下:
[Guid("729ba6af-3eff-4b75-b43b-d951a190dbe6")]
public class FileTimeConvert
{
?? public FileTimeConvert()
?? {
?? }
?? public string ConvertTime(long fileTime)
?? {
??? string retVal = string.Empty;
??? if (fileTime > 0)
??? {
???? DateTime dt = DateTime.FromFileTime(fileTime);
???? retVal = dt.ToString();???
??? }
??? return retVal;
?? }?
}
注意這個(gè)Guid我們?cè)诖鎯?chǔ)過程中引用要用到這個(gè)Guid.
為方便可能在多處需要調(diào)用,我們專門寫一個(gè)存儲(chǔ)過程
如下:
CREATE PROCEDURE spu_ConvertFileTimeToNormal
@ticks BIGINT,
@returnval varchar(40) output
AS
DECLARE @src varchar(255)
DECLARE @desc varchar(255)
DECLARE @object int
DECLARE @hr int
EXEC @hr = sp_OACreate '{729ba6af-3eff-4b75-b43b-d951a190dbe6}',@object OUT
IF @hr = 0 --如果創(chuàng)建對(duì)象成功
BEGIN
?? EXEC @hr = sp_OAMethod @object,'ConvertTime',@returnval OUT,@ticks
???? print @returnval
???? print @hr
?? if(@hr <> 0)
??? BEGIN
????? EXEC sp_OAGetErrorInfo @object, @src OUT, @desc OUT
???? SELECT hr=convert(varbinary(4),@hr), Source=@src, Description=@desc
??? END
??
?? END
ELSE
BEGIN
?? --print @hr
?? print 'Create Object ConvertTime failed'
???? EXEC sp_OAGetErrorInfo @object, @src OUT, @desc OUT
???? SELECT hr=convert(varbinary(4),@hr), Source=@src, Description=@desc
???? RETURN
END
EXEC @hr = sp_OADestroy @object
IF @hr <> 0
BEGIN
??? EXEC sp_OAGetErrorInfo @object
??? RETURN
END
GO
這個(gè)時(shí)候我們還差最后一步注冊(cè)DLL了
在.net 命令行下輸入 regasm -codebase path
好了,現(xiàn)在我們就可以在其他存儲(chǔ)過程中調(diào)用這個(gè)存儲(chǔ)過程返回正常的時(shí)間了.
給個(gè)小例子:
EXEC spu_ConvertFileTimeToNormal @CreateTime,@NormalTime OUT???
@CreateTime:FileTime格式
@NormalTime :正常的時(shí)間格式字符串(spu_ConvertFileTimeToNormal 存儲(chǔ)過程返回值)
這個(gè)簡單的小例子說明了我們?cè)趺礃釉诖鎯?chǔ)過程中調(diào)用DLL
是不是你解決問題又多了一個(gè)選擇了呢?
轉(zhuǎn)自: http://www.cnblogs.com/dcba1112/archive/2011/05/12/2044849.html
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元
