【问题标题】:Oracle Database ConnectionOracle 数据库连接
【发布时间】:2017-05-18 19:24:22
【问题描述】:

我是 Web 编程的初学者,但我遇到了 oracle 数据库连接问题。我的代码在 Mssql 上运行良好,但不适用于 oracle。我想将 db 从 mssql 更改为 oracle。 我已经下载了odac。这是我的 SqlOperations 类。

using System;
using System.Collections.Generic;
using System.Data;
using Oracle.DataAccess;
using System.Data.OracleClient;
using System.Data.Odbc;
using System.Linq;
using System.Web;

namespace BagciEmlak
{
public class SqlOperations
{
    OracleConnection con;
    OracleCommand cmd;
    OracleDataAdapter sda;
    DataTable dt;
    public OracleConnection OracleConnect()
    {
        try
        {
            con = new OracleConnection ("Data Source=SYS-CDB12c; User ID=HR; Password=hr; Unicode=true;");
            con.Open();
            return con;
        }
        catch (OracleException e)
        {

            throw;
        }

    }
    public int Command(string ConStr, OracleConnection conn)
    {
        try
        {
            cmd = new OracleCommand(ConStr, conn);

            return cmd.ExecuteNonQuery();
        }
        catch (Exception e)
        {

            throw;
        }
        finally
        {
            cmd.Dispose();
            conn.Close();
            conn.Dispose();
        }


    }
    public DataTable GetDataTable(string ConStr, OracleConnection conn)
    {
        try
        {
            dt = new DataTable();
            sda = new OracleDataAdapter(ConStr, conn);
            sda.Fill(dt);

            return dt;
        }
        catch (Exception e)
        {

            throw;
        }
        finally
        {
            sda.Dispose();
            conn.Close();
            conn.Dispose();
        }

    }
    public DataRow GetDataRow(string ConStr, OracleConnection conn)
    {
        dt = GetDataTable(ConStr, conn);
        if (dt.Rows.Count==0)
        {
            return null;
        }
        else
        {
            return dt.Rows[0];
        }
    }
    public string GetDataCell(string ConStr, OracleConnection conn)
    {
        dt = GetDataTable(ConStr, conn);
        if (dt.Rows.Count == 0)
        {
            return null;
        }
        else
        {
            return dt.Rows[0][0].ToString();
        }
    }

}

}

这是我的 webconfig 代码:

<connectionStrings>
    <add name="{ConnectionName}" 
    connectionString="Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=MyHost)(PORT=MyPort)))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=MyOracleSID)));User Id=HR;Password=HR;" 
    providerName="Oracle.DataAccess.Client"/>
 </connectionStrings>

所以你能帮我看看有什么问题吗

【问题讨论】:

  • 当我编译时没有错误,但在 chrome 中我看到:“/”应用程序中的服务器错误。无法加载文件或程序集“Oracle.DataAccess”或其依赖项之一。试图加载格式不正确的程序。
  • System.Data.OracleClient 已弃用。不要使用它。使用Oracle Managed Client。并且不要将您的 IDiposable (OracleConnection) 对象存储为字段。当然,为什么要使用 DataTable 而不是强类型对象?
  • 你有一个 TNSNAMES 文件还下载 32 位的 Oracle.Data.Client .. 你可以像使用 Sql Server 等一样使用连接字符串。我使用 Oracle 和 Sql Server每天。例如,根据您的项目设置,您可以将其更改为 x86,然后更改您的配置文件以使其看起来不同.. 例如&lt;connectionStrings&gt; &lt;add name="DbConn" connectionString="Data Source=DBANAME;User Id=userId;Password=yourPassword;"/&gt;

标签: c# asp.net database oracle database-connection


【解决方案1】:

只需将OracleConnection中的参数更改为

SERVER=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=SYS-CDB12c)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=MyOracleSID))); uid=HR;pwd=hr;

还将 myOracleSID 更改为您的 oracle 数据库实例名称。

在您的情况下,web.config 中的连接字符串与您的连接无关。因为您使用配置管理器将连接作为字符串参数 whitout 传递。

【讨论】:

  • 我做了所有,但这个错误没有解决。然后我发现它大约是 32 位/64 位的问题。当我更改平台目标 x86 格式时,这个错误可能正在解决。但现在我正在接受这个异常:System.NullReferenceException:'对象引用未设置为对象的实例。你有什么想法吗?我检查了我的用户名和密码,但它是真的......
  • 请显示您的网络配置连接字符串部分。
  • 据我所知,配置管理器中存在问题。它无法通过传递的名称找到连接字符串。
  • 没有。我要求 web.config 内容)。检查您的代码和 web.config 中的连接字符串的名称。它们是一样的吗?
  • 将 webConfig 中的连接字符串名称更改为 connectionString。没有 {} 范围。
猜你喜欢
  • 2016-10-03
  • 2014-03-18
  • 2019-12-30
  • 2017-12-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多