最近一個項目中遇到一個轉(zhuǎn)換filetime的問題.時間是在c#中用datetime.tofiletime寫入數(shù)據(jù)庫中,這在存儲過程中判斷年和季度成了問題,怎么樣才能把時間轉(zhuǎn)換為正常的時間格式呢?sql server中又沒有fromfiletime對應(yīng)的方法?其實(shí)很簡單用c#寫一個轉(zhuǎn)換時間的dll然后在存儲過程中調(diào)用就可以了.
轉(zhuǎn)換時間的類如下:
[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;
}
}
注意這個guid我們在存儲過程中引用要用到這個guid.
為方便可能在多處需要調(diào)用,我們專門寫一個存儲過程
如下:
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)建對象成功
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), [email protected], [email protected]
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), [email protected], [email protected]
return
end
exec @hr = sp_oadestroy @object
if @hr <> 0
begin
exec sp_oageterrorinfo @object
return
end
go
這個時候我們還差最后一步注冊dll了
在.net 命令行下輸入 regasm -codebase path
好了,現(xiàn)在我們就可以在其他存儲過程中調(diào)用這個存儲過程返回正常的時間了.
給個小例子:
exec spu_convertfiletimetonormal @createtime,@normaltime out
@createtime:filetime格式
@normaltime :正常的時間格式字符串(spu_convertfiletimetonormal 存儲過程返回值)
這個簡單的小例子說明了我們怎么樣在存儲過程中調(diào)用dll
是不是你解決問題又多了一個選擇了呢?
新聞熱點(diǎn)
疑難解答
圖片精選