RT 就是在sql2000里面调用c# 写的DLL 能做到么
如何实现!?
谢谢

解决方案 »

  1.   

    非常期待,就是不知道sql 2000是怎么调用这个dll的
      

  2.   

    最近一个项目中遇到一个转换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 OUTIF @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
     ENDGO这个时候我们还差最后一步注册DLL了
    在.net 命令行下输入 regasm -codebase path好了,现在我们就可以在其他存储过程中调用这个存储过程返回正常的时间了.
    给个小例子:
    EXEC spu_ConvertFileTimeToNormal @CreateTime,@NormalTime OUT    
    @CreateTime:FileTime格式
    @NormalTime :正常的时间格式字符串(spu_ConvertFileTimeToNormal 存储过程返回值)这个简单的小例子说明了我们怎么样在存储过程中调用DLLLOOK!
      

  3.   

    就是这样
     但是问题是 当你发布的时候 如何使这个扩展存储过程好使??(就是如何注册这个dll)??
      

  4.   

    我在SQL Server 2005中用过。具体你可以参照我的一篇文章。希望能对你有所帮助。http://blog.csdn.net/cenmengqi/archive/2008/03/20/2200784.aspx
      

  5.   

    sql 2005 好像很简单 直接就能调用现在不知道部署的时候如何?!
      

  6.   

    你要是换个语言写可能还行,用c#写啊,2000中没有clr,估计不行,最要用能编译成终极代码的语言别写是可以的