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 の名前: INDIANBANK

Microsoft OLE DB Provider for ODBC Driverを使用してリンク サーバーを作成し、Oracle に接続しました(ORACLE DB IS LOCATED ON REMOTE SERVER)

My DSN Show Test Connection Succeeded . My連携サーバーと同じです。

次のクエリを実行するSelect * From openquery(IndianBank,'Select * From ATM_PROGNOSIS.IR_ATMMON_AGS') と、1行しか取得されません

私のリンクされたサーバーコード:-

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のは役に立たない。

このドライバを使用することをお勧めします
。OracleDataProviderfor.NET
これはOracleの方がはるかに使いやすいです。

これは、 チューニングが説明さ れている
ODP.NETの例です。

そしてここ にODP.NETの完全なドキュメントがあります

お役に立てれば :)

以下の私のコメントを参照してください。

PS Microsoftドライバーの場合、パラメーターはここに表示されます Microsoft OLE DB Provider for ODBC

于 2013-02-01T07:05:29.873 に答える
0

同じ問題の私の解決策は

Oracle ODBC ドライバー設定で数値設定パラメーターを米国数値に設定します。

ODBC ヘルプからの引用、問題のあるものには下線が引かれています) 数値設定 - 文字列としてバインドされた数値データを受け取って返すときに、小数点およびグループ区切り文字を決定するために使用する数値設定を選択できます。このオプションでは、Oracle NLS 設定 (既定の設定)、Microsoft の既定の地域設定 (相互運用性を高めるために Oracle OLE DB ドライバーの動作をミラーリングする方法を提供するため)、または US 数値設定 (MS Access または MS Access を使用する場合に必要) を選択できます。米国以外の環境では DAO (Database Access Objects))。

于 2013-05-10T08:57:20.613 に答える