【问题标题】:How to connect c# with Oracle database specifying the schema name?如何将 c# 与指定模式名称的 Oracle 数据库连接?
【发布时间】:2016-10-01 04:50:03
【问题描述】:

当架构名称与用户名不同时,我在尝试连接到指定架构名称的 oracle 数据库时遇到问题。

我曾经使用下一个字符串连接。

但在这种情况下,数据库的 Schema 与用户名相同。

     String con = "data source= (DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = " + host + ")(PORT = " + port + ")))(CONNECT_DATA =(SERVICE_NAME = " + servicename + ")));
USER ID=" + user + ";
PASSWORD=" + pass;

所以登录查询是这样的

SELECT * FROM usuarios WHERE usuario='545478';

现在我有一个新的 conexion 用户,与 Schema 不同,所以现在我需要使用 Schema 名称更改所有 sql 查询。 例如,如果架构名称是 PRODUCTION_DB,则需要将查询更改为:

SELECT * FROM PRODUCTION_DB.usuarios WHERE usuario='545478';

但我不想更改代码中的所有查询。我更喜欢在连接中指定数据库名称,就像在 MySQL 中一样。

如何更改连接字符串以添加数据库名称?

例如:

String con = "data source= (DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = " + host + ")(PORT = " + port + ")))(CONNECT_DATA =(SERVICE_NAME = " + servicename + ")));
USER ID=" + user + ";PASSWORD=" + pass;
 DATABASE = "PRODUCTION_DB";

【问题讨论】:

  • 您使用的是 32 位 Oracle 客户端吗?如果是这样,您不必设置连接字符串来使用TnsNames,您仍然可以在您的 app.Config 或 Web.Config 中使用此样式,我目前正在使用 Oracle,它以这种方式工作。 <connectionStrings> <add name="DbConn" connectionString=" Data Source=DataBaseName;User Id=xxx;Password=xxxx;"/>
  • 嗨,我正在使用 app.config,但我不明白这一点。
  • 什么是不明白的......也许你应该阅读Configuration Class 是什么以及它是如何工作的
  • 我已经与 oracle 数据库支持进行了交谈。他们告诉我这是不可能的。我需要在查询中指定所有者。那么,你真的认为你比他们知道的更多吗?你的解决方案是无用的。
  • 这就是为什么我目前正在使用它,并且在 64 位机器上使用 32 位 Oracle 客户端,您需要将项目从 AnyCPU 设置为 x86 祝我好运,我正在使用我在cmets早点..

标签: c# database oracle


【解决方案1】:

试试这个连接字符串:

 string connectionString = "user id=uat;password=*****;data source=localhost:1521/orcl";
 OracleConnection connection = new OracleConnection(connectionString);
 connection.Open();

地点:

  • orcl - 是我的数据库名称 (SID)
  • uat - 是一个模式名(用户名)
  • localhost:1521 - 是服务器名称(在我的例子中:localhost)和端口。

【讨论】:

  • 嗨@kordirko,感谢您帮助我。我需要指定 6 件事。 1.-主机名,2.-密码。 3.- 主机 ip 4.- 端口 5.- SID 和 6.- DataBaseName。 在您的示例中,您说 SID 与数据库的名称相同,但在我的情况下不是。另一个想法?
【解决方案2】:

可以通过以下方式完成:

OracleConnection connection = new OracleConnection(connectionString); 
connection.Open();
OracleCommand cm = connection.CreateCommand();
cm.CommandText = "ALTER SESSION SET CURRENT_SCHEMA = PRODUCTION_DB";
cm.ExecuteNonQuery();

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2018-04-27
  • 2017-02-26
  • 1970-01-01
  • 1970-01-01
  • 2023-03-26
  • 1970-01-01
  • 2014-10-31
  • 1970-01-01
相关资源
最近更新 更多