2005和2008 返回错误时
错误号         错误源                        错误描述
0x80131700 ODSOLE Extended Procedure NULL
SQL2000正常执行declare @err int,@src varchar(255),@desc varchar(255)
declare @obj int,@re int
exec @err=sp_OACreate 'ClassLibrary1.Class1', @obj out
if @err<>0  
goto lberr  --如果创建失败,则进行错误处理exec @err=sp_OAMethod @obj,'add',@re out,100,200
if @err<>0 
goto lberr  --如果调用错误,则进行错误处理print '返回的结果是:' + str(@re)--完成后释放
exec sp_OADestroy @objreturnlberr:
exec sp_oageterrorinfo 0,@src out,@desc out
select cast(@err as varbinary(4)) as 错误号
  ,@src as 错误源,@desc as 错误描述
另外说下:SQL2005   ole自动化已经开启,DLL文件C#写的  COM可见为true ,秘钥,已经用regasm注册过,注册时候还加了条命令 /codebase

解决方案 »

  1.   


    EXEC sp_configure 'Ole Automation Procedures', 1
    GORECONFIGURE
    GO
    你先运行这个代码,意思为开启'Ole Automation Procedures' 允许使用
    再运行你上面的代码就不会报错。我的环境是sql server2008
      

  2.   


    declare @err int,@src varchar(255),@desc varchar(255)
    declare @obj int,@re int
    exec @err=sp_OACreate 'ClassLibrary1.Class1', @obj out
    if @err<>0  
    goto lberr  --如果创建失败,则进行错误处理exec @err=sp_OAMethod @obj,'add',@re out,100,200
    if @err<>0 
    goto lberr  --如果调用错误,则进行错误处理print '返回的结果是:' + str(@re)--完成后释放
    exec sp_OADestroy @objreturnlberr:
    exec sp_oageterrorinfo 0,@src out,@desc out
    select cast(@err as varbinary(4)) as 错误号
      ,@src as 错误源,@desc as 错误描述
      
      
      
    /*
    错误号 错误源 错误描述
    0x800401F3 ODSOLE Extended Procedure  无效的类字符串
    */
      
      
      

  3.   

    而且你这条就是开启OLE自动化 我1楼就说 我已经开过了
      

  4.   

    楼主:这种用法 OUT 啦,快试试 SQLCLR 吧,用 C# 编写存储过程,爽!
      

  5.   

    try this,
    1.确认执行环境SQL2005/SQL2008所在Windows的服务器组件中,
      是否存在ClassLibrary1.Class1.2.SQL2005/SQL2008的SQL Service登录身份设为Local System.3.确认SQL2005/SQL2008中,执行该段代码的帐号,须有sysadmin角色权限.参考这个例子 http://www.sudu.cn/info/html/edu/20071227/49802.html
      

  6.   

    前提是sp_configure 'Ole Automation Procedures',1 打开OLE自动化。
    一般不建议楼主的模式,用CLR来写吧
      

  7.   

    主要是DLL里边的内容太多了 重写一遍要累死