5

我正在使用OpenQuery从 Oracle 表中获取行集到我的 SQL Server 中。然后我发现有一些东西被称为OPENROWSET获取所有行

但它对我没有用。

SELECT a.*
FROM OPENROWSET('MSDASQL',
   'DRIVER={SQL Server};SERVER=INDIANBANK;UID=ags;PWD=mypass',
   'Select * From ATM_PROGNOSIS.IR_ATMMON_AGS') AS a

错误 :-

OLE DB provider "MSDASQL" for linked server "(null)" returned message "[Microsoft][ODBC SQL Server Driver][DBNETLIB]ConnectionOpen (Connect()).".
OLE DB provider "MSDASQL" for linked server "(null)" returned message "[Microsoft][ODBC SQL Server Driver][DBNETLIB]SQL Server does not exist or access denied.".
Msg 7303, Level 16, State 1, Line 1
Cannot initialize the data source object of OLE DB provider "MSDASQL" for linked server "(null)".

我的 DSN 名称:印度银行

我已使用Microsoft OLE DB Provider for ODBC Driver创建链接服务器以连接到 oracle (ORACLE DB 位于远程服务器上)

我的 DSN 显示测试连接成功。与我的链接服务器相同。

当我执行以下查询时Select * From openquery(IndianBank,'Select * From ATM_PROGNOSIS.IR_ATMMON_AGS') 它只检索一行

我的链接服务器代码:-

EXEC master.dbo.sp_addlinkedserver @server = N'INDIANBANK', @srvproduct=N'IndianBankOracle', @provider=N'MSDASQL', @datasrc=N'INDIANBANK'
EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname=N'INDIANBANK',@useself=N'False',@locallogin=NULL,@rmtuser=N'ags',@rmtpassword='########'

GO

EXEC master.dbo.sp_serveroption @server=N'INDIANBANK', @optname=N'collation compatible', @optvalue=N'true'
GO

EXEC master.dbo.sp_serveroption @server=N'INDIANBANK', @optname=N'data access', @optvalue=N'true'
GO

EXEC master.dbo.sp_serveroption @server=N'INDIANBANK', @optname=N'dist', @optvalue=N'false'
GO

EXEC master.dbo.sp_serveroption @server=N'INDIANBANK', @optname=N'pub', @optvalue=N'false'
GO

EXEC master.dbo.sp_serveroption @server=N'INDIANBANK', @optname=N'rpc', @optvalue=N'false'
GO

EXEC master.dbo.sp_serveroption @server=N'INDIANBANK', @optname=N'rpc out', @optvalue=N'false'
GO

EXEC master.dbo.sp_serveroption @server=N'INDIANBANK', @optname=N'sub', @optvalue=N'false'
GO

EXEC master.dbo.sp_serveroption @server=N'INDIANBANK', @optname=N'connect timeout', @optvalue=N'0'
GO

EXEC master.dbo.sp_serveroption @server=N'INDIANBANK', @optname=N'collation name', @optvalue=null
GO

EXEC master.dbo.sp_serveroption @server=N'INDIANBANK', @optname=N'lazy schema validation', @optvalue=N'false'
GO

EXEC master.dbo.sp_serveroption @server=N'INDIANBANK', @optname=N'query timeout', @optvalue=N'0'
GO

EXEC master.dbo.sp_serveroption @server=N'INDIANBANK', @optname=N'use remote collation', @optvalue=N'true'
GO

EXEC master.dbo.sp_serveroption @server=N'INDIANBANK', @optname=N'remote proc transaction promotion', @optvalue=N'true'
GO
4

2 回答 2

5

如果你使用这样的字符串 "'MSDASQL','DRIVER={SQL Server};SERVER=INDIANBANK;UID=ags;PWD=mypass', 'Select * From ATM_PROGNOSIS.IR_ATMMON_AGS'" 你得到了无 DSN 连接所以测试DSN 没用。

我建议您使用此驱动程序
Oracle Data Provider for .NET
对 Oracle 更友好。

这是 描述调优
的 ODP.NET 示例。

这是 ODP.NET 的完整文档

希望这可以帮助 :)

请参阅下面的评论。

PS 对于 Microsoft 驱动程序,此处显示的参数 Microsoft OLE DB Provider for ODBC

于 2013-02-01T07:05:29.873 回答
0

我对同样问题的解决方案是

在 Oracle ODBC 驱动程序设置中将 Numeric Settings 参数设置为 US numeric。

引用 ODBC 帮助,有问题的东西加下划线) 数字设置 - 允许您选择在接收和返回绑定为字符串的数字数据时,将使用哪些数字设置来确定小数和组分隔符。此选项允许您选择 Oracle NLS 设置(默认设置)、Microsoft 默认区域设置(提供一种方式来反映 Oracle OLE DB 驱动程序的行为以提高互操作性)或美国数字设置(使用 MS Access 或非美国环境中的 DAO(数据库访问对象)。

于 2013-05-10T08:57:20.613 回答