【问题标题】:How to connect to Oracle database如何连接到 Oracle 数据库
【发布时间】:2018-06-21 19:19:34
【问题描述】:

我正在使用以下代码连接到 Oracle 服务器。我需要特别使用 OdbcConnection 类,因为我正在对当前使用此方法连接到 SQL Server 的现有应用程序进行增强。所以我也必须对其他 DBMS 使用相同的方法。

我已尝试使用以下代码:

const string ConnectionString = @"SERVER=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=MachineName.Domain.com)(PORT=1521))(CONNECT_DATA=(SERVER = DEDICATED)(SERVICE_NAME=orcl.Domain.com)));uid=system;pwd=user";

using (OdbcConnection connection = new OdbcConnection(ConnectionString))
    {
    connection.Open();
    }

但是调用 Open() 方法时出现异常,如下所示:

“错误 [IM002] [Microsoft][ODBC Driver Manager] 未找到数据源名称且未指定默认驱动程序”

知道我在这里做错了什么吗?

【问题讨论】:

    标签: c# oracle


    【解决方案1】:

    看看Oracle connection strings

    你的connectionString应该是这样的:

    var DB = @"SERVER=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=MachineName.Domain.com)(PORT=1521))(CONNECT_DATA=(SERVER = DEDICATED)(SERVICE_NAME=orcl.Domain.com)))";
    string ConnectionString = "Driver={Oracle in OraClient11g_home1};Dbq=" + DB + ";uid=system;pwd=user;"
    

    您机器上的驱动程序名称可能不同。您也可以使用 Microsoft (Driver={Microsoft ODBC for Oracle};Server=...) 的 ODBC 驱动程序,但是这已被弃用多年。

    其实我更喜欢 DbConnectionStringBuilder(甚至OdbcConnectionStringBuilder

    var str = new DbConnectionStringBuilder(true);
    str.Add("Driver", "Oracle in OraClient11g_home1");
    str.Add("Dbq", @"(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=MachineName.Domain.com)(PORT=1521))(CONNECT_DATA=(SERVER = DEDICATED)(SERVICE_NAME=orcl.Domain.com)))");
    str.Add("Uid", "system");
    str.Add("Pwd", "user");
    string ConnectionString = str.ConnectionString;
    

    【讨论】:

      【解决方案2】:
      ///Your connection string should be like           
      string str = Data Source=(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST = abc )(PORT = 123))(CONNECT_DATA =(SID = xyz)));User Id=abc_xyz;Password=111;Min Pool Size=10;Connection Lifetime=120;Connection Timeout=600;Incr Pool Size=5; Decr Pool Size=2;validate connection=true;
      
         using (OracleConnection con = new OracleConnection(str))
              {
                  using (OracleCommand cmd = con.CreateCommand())
                  {
                      if (con.State != ConnectionState.Open)
                      {
                          con.Open();
                      }
                      cmd.CommandType = CommandType.StoredProcedure;
                      cmd.CommandText = RoutineConstant.Text;
                      cmd.BindByName = true;
      
                      cmd.ExecuteNonQuery();
                      if (cmd.Parameters["Value"].Value != null && cmd.Parameters["Value"].Value != DBNull.Value)
                      {
                          return Convert.ToDecimal(cmd.Parameters["Value"].Value.ToString());
                      }
                  }
               }
      

      【讨论】:

      • 我没有看到任何尝试回答这个问题。你的“答案”的目的是什么?你至少应该解释一下你的代码,仅仅粘贴几行代码很少被认为是有帮助的。
      猜你喜欢
      • 2010-09-10
      • 1970-01-01
      • 2019-04-17
      • 1970-01-01
      • 2014-03-18
      • 1970-01-01
      • 2017-05-18
      相关资源
      最近更新 更多