`
izuoyan
  • 浏览: 8966396 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

一个关于“OLE DB 提供程序 'sqloledb' 指出该对象中没有任何列”错误的解决方法

阅读更多

--一个关于“OLE DB 提供程序'sqloledb' 指出该对象中没有任何列错误的解决方法

--在网上看到一个网友提问把系统过程的结果输出到文本文件,心想这不简单呀,bcp+openrowset呀轻松解决呀,本着认真的态度(其实是怕写个错误的让人家笑话我)我在我的查询分析器里写个试:

USE mydb

GO

--1

SELECT *

FROM OPENROWSET('SQLOLEDB','SERVER=.;UID=sa;PWD=123','exec mydb.dbo.sp_helpsrvrolemember')

--2

SELECT *

FROM OPENROWSET('sqloledb','Trusted_Connection=yes','exec mydb..sp_helpsrvrolemember ')

/*

F5一运行,完了,出丑了

服务器: 消息7357,级别16,状态2,行1

未能处理对象'exec mydb.dbo.sp_helpsrvrolemember'OLE DB 提供程序'SQLOLEDB' 指出该对象中没有任何列。

OLE DB 错误跟踪[Non-interface error: OLE DB provider unable to process object, since the object has no columnsProviderName='SQLOLEDB', Query=exec mydb.dbo.sp_helpsrvrolemember']。

这老写的语法怎么会报错呢,自己写一个过程试试,一试更呆了

*/

GO

create proc pr_test

as

begin

select * from tb

end

go

SELECT *

FROM OPENROWSET('sqloledb','Trusted_Connection=yes','exec mydb..pr_test')

drop proc pr_test

/*

TypeID Type

----------- ----

1 t1

2 t2

3 t3

4 t4

(所影响的行数为4 行)

*/

--结果是想的,那为什么这个系统过程不行呢?那先看看这个过程是什么东东:

USE MASTER

GO

sp_helptext 'master..sp_helpsrvrolemember'

/*

Text

------------------------------------------

CREATE PROCEDURE sp_helpsrvrolemember

@srvrolename sysname = NULL

AS

if @srvrolename is not null

begin

-- VALIDATE GIVEN NAME

if not exists (select * from master.dbo.spt_values

where name = @srvrolename and low = 0 and type = 'SRV')

begin

raiserror(15412, -1, -1, @srvrolename)

return (1)

end

-- RESULT SET FOR SINGLE SERVER-ROLE

select 'ServerRole' = spv.name, 'MemberName' = lgn.name, 'MemberSID' = lgn.sid

from master.dbo.spt_values spv, master.dbo.sysxlogins lgn

where spv.name = @srvrolename and

spv.low = 0 and

spv.type = 'SRV' and

lgn.srvid IS NULL and

spv.number & lgn.xstatus = spv.number

end

else

begin

-- RESULT SET FOR ALL SERVER-ROLES

select 'ServerRole' = spv.name, 'MemberName' = lgn.name, 'MemberSID' = lgn.sid

from master.dbo.spt_values spv, master.dbo.sysxlogins lgn

where spv.low = 0 and

spv.type = 'SRV' and

lgn.srvid IS NULL and

spv.number & lgn.xstatus = spv.number

end

return (0) -- sp_helpsrvrolemember

*/

--一看,哦,难道这个结果因为输入参数不同而有不同select来返回影响了?或是为空时raiserror 没有select 结果集吗?好办,我们再试:

use mydb

go

alter proc pr_test

@p int =null

as

begin

if @p is null

select * from tb

else

return 0

return 1

end

go

create proc pr_test1

@p int =null

as

begin

if @p is not null

return 0

else

select * from tb

return 1

end

go

create proc pr_test2

@p int =null

as

begin

if @p is not null

return 0

else

select * from tb

return 1

end

go

SELECT *

FROM OPENROWSET('sqloledb', 'Trusted_Connection=yes','exec mydb..pr_test')

SELECT *

FROM OPENROWSET('sqloledb', 'Trusted_Connection=yes','exec mydb..pr_test 1')

SELECT *

FROM OPENROWSET('sqloledb', 'Trusted_Connection=yes','exec mydb..pr_test1')

SELECT *

FROM OPENROWSET('sqloledb', 'Trusted_Connection=yes','exec mydb..pr_test2')

drop proc pr_test,pr_test1,pr_test2

--通过以上的测试,结果很明显了,也就是查询语句对过程可能的结果集进行了分析,特别第一个过程带参与不带参的结果就很明显了,上网一gg,问的人还真不少,好多人期待进行改进,难道就真的不行了?,通过查sql2000的联机帮助,发现这个设置项,很管用,哈哈

/*

SET FMTONLY

只将元数据返回给客户端。

语法

SET FMTONLY { ON | OFF }

注释

SET FMTONLY ON 时,将不对行进行处理,也不将行作为请求的结果发送到客户端。

SET FMTONLY 的设置是在执行或运行时设置,而不是在分析时设置。

很显然,这个开关项正是我们所想要分析器应该执行的结果,好试一下吧:

*/

SELECT *

FROM OPENROWSET('SQLOLEDB','DRIVER={SQL Server};SERVER=.;UID=sa;PWD=123','set fmtonly off;exec mydb.dbo.sp_helpsrvrolemember') AS a

SELECT *

FROM OPENROWSET('SQLOLEDB','SERVER=.;UID=sa;PWD=123','set fmtonly off;exec mydb.dbo.sp_helpsrvrolemember') AS a

EXEC master..xp_cmdshell

'bcp "select * from OPENROWSET(''SQLOLEDB'',''SERVER=.;UID=sa;PWD=123'',''set fmtonly off;exec mydb.dbo.sp_helpsrvrolemember'') AS a " queryout c:\Authors.txt -c -S. -Usa -P'

/*

ServerRole MemberName MemberSID

----------------------------------- ------------------- ------

sysadmin BUILTIN\Administrators 0x01020000000000052000000020020000

sysadmin sa 0x01

(所影响的行数为2 行)

ServerRole MemberName MemberSID

--------------------- ----------- ---------------------------

sysadmin BUILTIN\Administrators 0x01020000000000052000000020020000

sysadmin sa 0x01

(所影响的行数为2 行)

output

-------------------

NULL

开始复制...

NULL

已复制了2 行。

数据包的大小(字节): 4096

时钟时间(毫秒): 10

NULL

(所影响的行数为7 行)

*/

--sql2005内确实进行了改进,下面二种写法都可以得到结果:

SELECT *

FROM OPENROWSET('SQLNCLI','Server=.\sql2005;Trusted_Connection=yes','exec testcsdn..sp_helpsrvrolemember')as a

SELECT *

FROM OPENROWSET('SQLOLEDB','DRIVER={SQL Server};SERVER=.\sql2005;UID=sa;PWD=123flystone','exec testcsdn.dbo.sp_helpsrvrolemember') AS a


文章载至:http://blog.csdn.net/happyflystone/archive/2009/09/14/4551247.aspx

分享到:
评论

相关推荐

    PB设置OLE DB 连接SQL SERVER

    SQLca.dbms= ‘OLEDB’ //接口类型 SQLca.AutoCommit = false SQLca.LogPass = logpass SQLca.LogId =logid SQLca.DBParm ="PROVIDER='SQLOLEDB', DATASOURCE='"+serverName+"'," & +"PROVIDERSTRING='Initial ...

    OLEDB驱动程序大全 SQLServer-OleDB-Provider

    OLEDB驱动程序大全 SQLServer-OleDB-Provider

    VB 2010 (52)Connection对象Sql和Access示例数据库.rar

    VB 2010 (52)Connection对象Sql和Access示例数据库。Connection字符串的格式。...要连接Microsoft SQL Server 7.0的以前版本,需要使用SQL Server的OLE DB数据提供程序(SQLOLEDB)的OleDbConnection对象。

    MS DTC配置,ATL,COM

    在sql server 2000下收到如下错误:该操作未能执行,因为 OLE DB 提供程序 'SQLOLEDB' 无法启动分布式事务。[OLE/DB provider returned message: 新事务不能登记到指定的事务处理器中。] OLE DB 错误跟踪[OLE/DB ...

    sqloledb.dll下载

    Microsoft OLE DB Provider for SQL Server

    火车采集器自动关闭,无法启动解决方案

    火车采集器打开后自动关闭解决方案 未在本地计算机上注册“Microsoft.Jet.OLEDB.4.0” 提供程序 问题 本地计算机上,打开IIS站点均出现数据库访问问题;打开访问数据库的软件则会出现类似这样的提示: 引用内容 ...

    SQLServer分布式事务问题

    在SQL Server 2000下收到如下错误: 该操作未能执行,因为 OLE DB 提供程序 ‘SQLOLEDB’ 无法启动分布式事务。 [OLE/DB provider returned message: 新事务不能登记到指定的事务处理器中。 ] OLE DB 错误跟踪[OLE...

    ADO.NET本质论.pdf

    7.7.7 sql xml oledb提供程序中的for xml 7.7.8 批量加载 7.7.9 未来的支持 7.8 使用sqlxml和.net 7.9 小结 第8章 提供程序:ado.net和数据提供程序 8.1 如何选择 8.2 保留ole db:ole db概念...

    用友U890发货单动态数据Excel表格导入

    [oledb] ; Everything after this line is an OLE DB initstring Provider=SQLOLEDB.1;Password=test;Persist Security Info=True;User ID=sa;Initial Catalog=UFDATA_001_2010;Data Source=YONGYOU 其中 Password=...

    一些文件未注册导致mssql表文件无法找开的解决方法

    Regsvr 32 .exe, 然后注册下列 DLL : C:\Program files\Common Files\System\ADO\Msado15.dll C:\Program files\Common Files\System\Ole Db\Oledb32.dll C:\Program files\Common Files\System\Ole Db\Sqloledb....

    VBnet数据库操作.doc

    'VB.net 连接SQL数据库的方法(一) [采用数据集] '================================================== ' 在窗体上添加一个DataGrid控件命名为DataGrid1.在窗体加载事件Load里写入以下代码 : Dim 数据库连接 As New...

    sql2005数据挖掘案例 绝对经典

    备注 在foodmart2000中自己创建2个表,在moiveclick中有一个查询,如不用查询,会出现死机现象 数据库路径:c:\data\ 运行dmx语言需要的设置:在Microsoft Sql Server Management Stdio中,已联接的Analysis ...

    餐饮管理.dsw

    //上面一句中连接字串中的Provider是针对ACCESS2000环境的,对于ACCESS97,需要改为:Provider=Microsoft.Jet.OLEDB.3.51; } _variant_t ra; try { m_pRecordset->Open("SELECT * FROM 姓名",_variant_...

    C++使用ADO连接Access数据库源代码(修正版)

    数据库类中的SQLServerDB是在原来SQL Server实例中修改的,实际上连接SQL Server和Access的区别仅在于连接字符串的不同, 连接SQL Server用: sprintf(m_strCon,"Provider=SQLOLEDB;Server=%s;Database=%s;uid=%s;...

    vc连接数据库的第三方类

    安装后,采用odbc建立一个连接的mysql数据连接,通过udl文件取出其中的字符串 采用myodbc的字符串如下: CString strConn = "Driver=MySQL ODBC 5.1 Driver;charset=Latin1;Server=192.168.1.235;Database=...

    一个delphi编写的数据转换工具,支持oracle、sqlserver、dbf、Excel和Csv数据之间的互转

    工作中经常处理相关数据,为了方便开发了这个小工具。原理很简单,利用Ado接口(之所以没用delphi的vcl控件是因为delphi对精度的截取问题),首先从源数据...需要驱动:MSDAORA.1、SQLOLEDB.1、Microsoft.Jet.OLEDB.4.0

    vc++数据库开发资源包.rar

    OLEDB.CHI OLEDB.CHM OLEDBSQL.CHI OLEDBSQL.CHM ─INCLUDE DB2CONST.H DBMCONST.H DTMCONST.H DTSCONST.H DTSFFILE.H DTSPKG.H DTSPUMP.H EQMCONST.H GENCONST.H IFXCONST.H MDSCONST.H MSDADC.H ...

    VC2010使用FastReport报表控件打印编辑报表

    3.还包括自己使用的VC下OLEDB操作类,使用方法与Delphi下数据库操作类似,日期等自动可转换相应数据类型可读写数据库二进制数据 数据库操作如:COleDatabase m_Database; if(m_Database.Open(_T("Provider=SQLOLEDB....

    xls转mdb代码以及.exe执行软件

    实现将一个Excel文件内容导入到一个文本文件 假设Excel中有两列,第一列为姓名,第二列为很行帐号(16位) 且银行帐号导出到文本文件后分两部分,前8位和后8位分开。 邹健: 如果要用你上面的语句插入的话,文本文件...

    SQL2000开发工具包

    SQL 2000中的开发工具,VS2008环境中没有这些文件,放在这里作备用,方便下载使用。 SQLDMO DB-LIBRARY NETWDBLI.LIB NETWDBLI.DLL 文件清单: D:\SQL2000>tree /f 文件夹 PATH 列表 卷序列号为 5411-BE00 D:. │...

Global site tag (gtag.js) - Google Analytics