|
■No84918 (makoto さん) に返信
> Data Source = (DESCRIPTION =
ネットサービス名を使うのではなく、Data Source に対して
(DESCRIPTION =(ADDRESS = 〜 あるいは
(DESCRIPTION =(ADDRESS_LIST = 〜 などを
直接指定しているのですね。
> SQL/PLUSでは接続できている(ユーザ名、パスワード、ホスト名、サービス名の大文字、小文字の違いはなし)
SQLPLUS.EXE あるいは SQLPLUSW.EXE での接続確認時にも
同じ形式で接続できているのですね。
sqlplus ^"JS01/JS01@(DESCRIPTION = ^
(ADDRESS_LIST = ^
(ADDRESS = (PROTOCOL = TCP)(HOST = **.**.**.**)(PORT = 1521))^
)^
(CONNECT_DATA = (SERVICE_NAME = **)))^"
> Oracle.ManagedDataAccess.dllのバージョン(4.121.2.0 64bit)
こちらでは問題を再現できませんでした。環境は違いますが…。
当方の検証手順を記載しておきます。
ちなみに接続先サーバーは 12.1.0.1.0 です。
(1) VS2012 で、C# + .NET 4.5 な DLL プロジェクト ClassLibrary1 を作成。
とりあえず、x86 ビルドな class Class1 を作成し、
nuget から Oracle.ManagedDataAccess 12.2.1100 を導入したところ、
Oracle.ManagedDataAccess.dll 4.122.1.0 が導入されました。
corflags.exe で確認したところ、AnyCPU のライブラリのようです。
Version : v4.0.30319
CLR Header: 2.5
PE : PE32
CorFlags : 0x9
ILONLY : 1
32BITREQ : 0
32BITPREF : 0
Signed : 1
(2) そこに下記のコードを用意して DEBUG ビルド。
namespace SampleLibrary20170823
{
[Guid("3B374682-14EE-4A84-B7C1-F26A14301D68")]
[ComVisible(true)]
public interface IWankuma84915
{
object Test(string user, string password, string source);
}
[Guid("CD12D525-6E66-48E6-88D6-7C160324258B")]
[ClassInterface(ClassInterfaceType.None)]
[ProgId("Wankuma.Sample84915")]
[ComVisible(true)]
public class Wankuma84915 : IWankuma84915
{
public object Test(string user, string password, string source)
{
object o = DBNull.Value;
using (var c = new Oracle.ManagedDataAccess.Client.OracleConnection())
{
var cb = new Oracle.ManagedDataAccess.Client.OracleConnectionStringBuilder();
cb.UserID = user;
cb.Password = password;
cb.DataSource =source;
c.ConnectionString = cb.ConnectionString;
c.Open();
using (var r = c.CreateCommand())
{
r.CommandText = "SELECT DUMMY FROM DUAL";
o = r.ExecuteScalar();
}
c.Close();
}
return o;
}
}
}
(3) VB6 で下記のコードで Project1.exe を作成。
なお、Text3 だけは MulitLine = True です。
Private Sub Command1_Click()
Dim o As Object
Set o = CreateObject("Wankuma.Sample84915")
Dim r As Variant
r = o.Test(Text1.Text, Text2.Text, Text3.Text)
MsgBox TypeName(r) & vbCrLf & "[" & CStr(r) & "]", vbInformation
Set o = Nothing
End Sub
(4) "C:\Wankuma_84915" フォルダーを作成し、下記の 3 ファイルだけを配置。
Project1.exe
ClassLibrary1.dll
Oracle.ManagedDataAccess.dll
(5) 「VS2012 x86 Native Tools コマンド プロンプト」を管理者起動し、
regasm "C:\Wankuma_84915\ClassLibrary1.dll"
を実行。『型は正常に登録されました。』と表示されることを確認。
(6) Project1.exe を起動して実行。
Command1 を押して、エラー無く下記が表示されることを確認。
---------------------------
String
[X]
---------------------------
Text1 にはユーザー名
Text2 にはパスワード
Text3 は改行入りで下記を指定しました。(** は適宜修正を)
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = **.**.**.**)(PORT = 1521))
)
(CONNECT_DATA = (SERVICE_NAME = **)))
|