リモートの Oracle DBMS に接続して .NET C# Web サービスに接続する必要があります
- 要求はクライアントの Oracle インストールですか? なんで?
- ODP.NETを使用する必要がある場合
ありがとう
リモートの Oracle DBMS に接続して .NET C# Web サービスに接続する必要があります
ありがとう
無料であり、Oracle に接続するための「公式」ADO.NET 互換プロバイダーであるため、ODP.NET の使用をお勧めします。1
ユーザーが Oracle クライアントを個別にインストールする必要がないようにするには、Oracle Instant Clientをダウンロードし、そこから次のファイルを取得します...
oci.dll
Oracle.DataAccess.dll (the managed ODP.NET assembly itself)
orannzsbb11.dll
oraociei11.dll
OraOps11w.dll
...そして、それらをアプリケーションと共に配布します。
残念ながら、これらの DLL のほとんどはネイティブ (および 32 ビット / 64 ビット固有) であるため、「任意の CPU」プラットフォーム用にビルドすることはできません (まだ2 )。
.NET コードは、「ファット」Oracle クライアントで使用するものと同じです (そして、他の ADO.NET プロバイダーと非常によく似ています)。
Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=MyHost)(PORT=MyPort)))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=MyOracleSID)));User Id=myUsername;Password=myPassword;
1商用の代替手段と、現在非推奨になっている古い Microsoft のプロバイダーがあります (とにかく、Oracle ネイティブ DLL をインストールする必要がなくなります)。
2 Fully Managed Oracle Providerを待つか、プロジェクト ファイル (MSBuild XML) を編集して、ビルド プラットフォームに応じて 32 ビットまたは 64 ビットの DLL を条件付きで含めるようにします。
<Choose>
<When Condition="'$(Platform)' == 'x64'">
<ItemGroup>
<Reference Include="Oracle.DataAccess, processorArchitecture=x64">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\ThirdParty\ODP.NET\x64\Oracle.DataAccess.dll</HintPath>
</Reference>
<Content Include="..\ThirdParty\ODP.NET\x64\oci.dll">
<Link>oci.dll</Link>
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="..\ThirdParty\ODP.NET\x64\orannzsbb11.dll">
<Link>orannzsbb11.dll</Link>
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="..\ThirdParty\ODP.NET\x64\oraociei11.dll">
<Link>oraociei11.dll</Link>
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="..\ThirdParty\ODP.NET\x64\OraOps11w.dll">
<Link>OraOps11w.dll</Link>
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
</ItemGroup>
</When>
<When Condition="'$(Platform)' == 'x86'">
<ItemGroup>
<Reference Include="Oracle.DataAccess, processorArchitecture=x86">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\ThirdParty\ODP.NET\x86\Oracle.DataAccess.dll</HintPath>
</Reference>
<Content Include="..\ThirdParty\ODP.NET\x86\oci.dll">
<Link>oci.dll</Link>
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="..\ThirdParty\ODP.NET\x86\orannzsbb11.dll">
<Link>orannzsbb11.dll</Link>
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="..\ThirdParty\ODP.NET\x86\oraociei11.dll">
<Link>oraociei11.dll</Link>
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="..\ThirdParty\ODP.NET\x86\OraOps11w.dll">
<Link>OraOps11w.dll</Link>
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
</ItemGroup>
</When>
</Choose>
Oracle.DataAccess
ODP.NETの名前空間を使用できると思います
次のように使用できます。
var _testConx = new OracleConnection(_testConnectionString);
var rezList = new List<Type>();
string _GetSQL = @"SELECT STATEMENT";
var dbCommand = new OracleCommand(_GetSQL , _testConx);
dbCommand .CommandType = CommandType.Text;
var reader = dbCommand .ExecuteReader();
while (reader.Read())
{
var rez = new Type();
rez.Field1= TryGetInt(reader.GetOracleValue(0));
rez.Field2= TryGetString(reader.GetOracleValue(1));
rezList.Add(rez);
}
return rezList;
これは、Oracle クライアントを使用してリモート データベースに接続します。
構成ファイルのような外部リソースで接続文字列を指定できます
Oracle が提供する OLEDB ドライバーを使用して、.net デスクトップ アプリケーションでリモートの Oracle データベースに接続しています。Web サービスでも機能するはずです。
String conString = "Provider=OraOLEDB.Oracle.1;User ID=username;password=password;Data Source=your_tnsname;Persist Security Info=False";
String query = "Select 2 from dual";
OleDbConnection OleDbCon = new OleDbConnection(conString);
OleDbCon.Open();
OleDbCommand cmd = new OleDbCommand(query, OleDbCon);
OleDbDataReader reader = cmd.ExecuteReader();
reader.Read();
decimal dResult = reader.GetDecimal(0);
con.Close();
return Convert.ToInt32(dResult);
適切な例外処理を追加する必要があります。
System.Data.OracleClient を使用するのが好きです。非推奨であることは知っていますが、組み込まれているという事実により、非常に使いやすくなっています。
また、ASP.NET アプリケーション以外でも、System.Web の SqlDataSource オブジェクトを利用したいと思っています。以下はサンプルコードです。次に、GetDataView() を呼び出して select ステートメントを渡すだけで、データを簡単に取得できます。GetDefaultConnectionString() と GetDefaultProviderName() を自分で実装する必要があります。プロバイダー名は「System.Data.OracleClient」であり、これらは接続文字列を開始するのに役立ちます。
SqlDataSource は System.Web に依存するため、アプリケーションには (小さいクライアント プロファイルだけでなく) .NET Framework 4 プロファイル全体が必要になることに注意してください。作成するものによっては、これが問題になる場合とそうでない場合があります。独自の SqlDataSource に相当するものをいつでも実装できますが、メリットが得られない限り、車輪を再発明したくありません。
/// <summary>
/// Creates a SqlDataSource object using the Default connectionstring in the web.config file and returns it.
/// </summary>
/// <returns>An SqlDataSource that has been initialized.</returns>
public static SqlDataSource GetDBConnection()
{
SqlDataSource db = new SqlDataSource();
db.ConnectionString = GetDefaultConnectionString();
db.ProviderName = GetDefaultProviderName();
return db;
}
/// <summary>
/// Creates a DataView object using the provided query and an SqlDataSource object.
/// </summary>
/// <param name="query">The select command to perform.</param>
/// <returns>A DataView with data results from executing the query.</returns>
public static DataView GetDataView(string query)
{
SqlDataSource ds = GetDBConnection();
ds.SelectCommand = query;
DataView dv = (DataView)ds.Select(DataSourceSelectArguments.Empty);
return dv;
}
更新/挿入/削除も同様に簡単です...
SqlDataSource ds=GetDBConnection();
ds.InsertCommand="insert into my_table values ('5','6')";
ds.Insert();