欢迎光临
我们一直在努力

存储过程中调用c#写的dll_c#应用

建站超值云服务器,限时71元/月

最近一个项目中遇到一个转换FileTime的问题.时间是在C#中用DateTime.ToFileTime写入数据库中,这在存储过程中判断年和季度成了问题,怎么样才能把时间转换为正常的时间格式呢?Sql server中又没有FromFileTime对应的方法?其实很简单用C#写一个转换时间的Dll然后在存储过程中调用就可以了.
转换时间的类如下:
[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.


为方便可能在多处需要调用,我们专门写一个存储过程
如下:


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 –如果创建对象成功
  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


这个时候我们还差最后一步注册DLL了
在.net 命令行下输入 regasm -codebase path


好了,现在我们就可以在其他存储过程中调用这个存储过程返回正常的时间了.
给个小例子:
EXEC spu_ConvertFileTimeToNormal @CreateTime,@NormalTime OUT   
@CreateTime:FileTime格式
@NormalTime :正常的时间格式字符串(spu_ConvertFileTimeToNormal 存储过程返回值)


这个简单的小例子说明了我们怎么样在存储过程中调用DLL
是不是你解决问题又多了一个选择了呢?



http://ktgu.cnblogs.com/archive/2006/05/30/413352.html

赞(0)
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com 特别注意:本站所有转载文章言论不代表本站观点! 本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。未经允许不得转载:IDC资讯中心 » 存储过程中调用c#写的dll_c#应用
分享到: 更多 (0)