C# 中的 Oracle 连接问题
本文关键字:问题 连接 Oracle 中的 | 更新日期: 2023-09-27 17:56:34
我有一台Windows XP机器,用于使用VS 2008创建.Net应用程序。
我想连接到运行 Oracle 10g 数据库的远程网络服务器(使用 Windows xp)。
我正在使用下面的代码(带有第一个连接字符串)直接连接到在同一台计算机上运行的 10g 版本,没有问题,但是当我尝试连接到网络机器时,它实际上使我的应用程序崩溃。
我已经尝试了连接字符串的几种变体,因为我觉得我一定在某处犯了语法错误。
我担心的是我在应用程序中有双重 try/catch 语句,我不明白为什么它根本不拒绝连接并报告错误。
我想真正的问题是"连接字符串的正确语法是什么"......或者不管我到底做错了什么。
任何帮助或建议将不胜感激。提前谢谢你。
//Class Variables
string CONNSTR = "Server=192.168.0.1:1521;User ID=zahid;Password=abc123;";
public Oracle()
{
InitializeComponent();
}
//Methods
private void TestMyOracleConnection()
{
OracleConnection Conn = new OracleConnection(CONNSTR);
try
{
Conn.Open();
MessageBox.Show("Oracle Connection Established", "Success");
}
catch (OracleException ex)
{
MessageBox.Show(ex.Message, "Oracle Connection Failed!");
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Oracle Connection Failed!");
}
finally
{
Conn.Close();
MessageBox.Show("Oracle Connection Closed", "Success");
}
}
private void buttonTestConnection_Click(object sender, EventArgs e)
{
TestMyOracleConnection();
}
您可能想尝试如下操作:
连接字符串:
Data Source=DBNAME;User ID=zahid;Password= abc123;Persist Security Info=True;Unicode=True;
现在查看PC上的tnsname.ora文件。它将位于本地 Oracle 客户端安装下的某个位置。您正在寻找类似以下内容的内容:
DBNAME =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = OracleServerName)(PORT = 1510))
(ADDRESS = (PROTOCOL = TCP)(HOST = OracleServerName)(PORT = 1514))
)
(CONNECT_DATA =
(SERVICE_NAME = DBNAME)
)
)
您希望用自己的DBNAME
和OracleServerName
替换。不要忘记,DBNAME
是主数据库的名称,而不是其下的一个架构(包含所有表和过程等的实体)。
假设您使用的是 ODP.Net,则可以尝试如下连接字符串(取自web.config
):
<add name="OdpConnection" connectionString="Data Source=xe;User Id=some_user;Password=some_password; Promotable Transaction=local"
providerName="Oracle.DataAccess.Client" />
可以使用如下所示的内容从代码中的 web.config 读取此连接字符串:
string connectionString = ConfigurationManager.ConnectionStrings["OdpConnection"].ConnectionString;
最好避免将连接字符串直接放在代码中,因为更改它们需要重新编译。通过将它们放在配置文件中,例如 web.config
或 app.config
,您可以更改它们而无需重新编译库或 exe。
try
{
Conn.Open();
MessageBox.Show("Oracle Connection Established", "Success");
}
catch (OracleException ex)
{
MessageBox.Show(ex.Message, "Oracle Connection Failed!");
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Oracle Connection Failed!");
}
finally
{
Conn.Close();
MessageBox.Show("Oracle Connection Closed", "Success");
}
你在这里有一个潜在的问题:如果连接。Open() 失败(所以连接没有打开),最后你调用 conn.close(),但连接没有打开 - 所以它也失败了,但它现在在 try catch 之外。您需要检查
if (Conn!=null && Conn.IsOpen())
Conn.Close();
预言机的连接字符串:数据源=TORCL;用户 ID = 我的用户名;密码=我的密码;
Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=MyHost)(PORT=MyPort)))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=MyOracleSID)));用户 ID = 我的用户名;密码=我的密码;
更多在这里