2013-04-05 109 views

回答

2

我想你可以使用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客户端连接到远程数据库。

可以

+0

对不起,我不明白一步...这样,我必须安装客户端Oracle(http://www.oracle.com/technetwork/database/enterprise-edition/downloads/112010-win64soft-094461 html的)? – Safari 2013-04-05 18:14:58

1

我们正在使用Oracle提供的OLEDB驱动程序连接到在.NET桌面应用程序远程Oracle数据库指定喜欢的配置文件外部的ressource的连接字符串。应该也适用于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); 

您应该添加适当的异常处理。

+0

对不起,我不明白一步......这样,我必须安装Client Oracle(http://www.oracle.com/technetwork/database/enterprise-edition/downloads/112010-win64soft-094461。 HTML)? – Safari 2013-04-05 18:16:50

1

我喜欢使用System.Data.OracleClient。我知道它已被弃用,但它内置的事实使得它很容易使用。

我也喜欢使用System.Web中的SqlDataSource对象,即使在非ASP.NET应用程序中也是如此。以下是一些示例代码。然后,获取数据就像调用GetDataView()并传入select语句一样简单。您将需要自己实现GetDefaultConnectionString()和GetDefaultProviderName()。提供程序名称是“System.Data.OracleClient”,并且these应该让您开始使用连接字符串。

请注意,由于它依赖于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(); 
+0

对不起,我不明白一步......这样,我必须安装Client Oracle(http://www.oracle.com/technetwork/database/enterprise-edition/downloads/112010-win64soft-094461。 HTML)? – Safari 2013-04-05 18:18:13

+1

是的,您必须使用Oracle客户端。我相信System.Data.OracleClient和Oracle.DataAccess(ODP.NET)都需要它,因为它们使用Oracle调用接口(oci.dll)。不确定第三方产品。这很简单 - 只需下载客户端,安装它,并且您应该可以使用其中一个答案(OLEDB除外)开始。我不熟悉OLEDB。 – mason 2013-04-08 16:02:33

+0

请参阅http://geekswithblogs.net/interfacemirror/archive/2010/12/19/143176.aspx – mason 2013-04-08 16:03:13

4

我建议使用ODP.NET,因为它是免费的,是“官方”的ADO.NET兼容用于连接提供商甲骨文。

要就无需单独安装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”平台(尚未)。您可能会考虑使用“tnsnames.ora independent”connection string如:

Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=MyHost)(PORT=MyPort)))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=MyOracleSID)));User Id=myUsername;Password=myPassword; 

有商业选择,并且现在已经过时(并且也救不了你不必反正安装Oracle本机DLL)老微软的供应商。

要么等待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>