[英]problem with oracle connection in c#
我有一台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();
}
假设您使用的是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。
你可能想尝试类似的东西:
连接字符串:
Data Source=DBNAME;User ID=zahid;Password= abc123;Persist Security Info=True;Unicode=True;
现在,在您的PC上查看tnsname.ora文件。 它将在您本地Oracle Client安装的某个位置。 你正在寻找类似的东西:
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
是主数据库的名称,而不是其下的架构之一(具有所有表和过程的实体等)。
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");
}
您这里有潜在的问题:如果conn.Open()失败(因此未打开连接),最后您调用conn.close(),但未打开连接-因此它也失败了,但现在不在try catch范围内。 您需要检查
if (Conn!=null && Conn.IsOpen())
Conn.Close();
oracle的连接字符串:数据源= TORCL;用户ID = myUsername;密码= myPassword;
数据源= {DESCRIPTION = {ADDRESS_LIST = {ADDRESS = {PROTOCOL = TCP} {HOST = MyHost} {PORT = MyPort}}} {CONNECT_DATA = {SERVER = DEDICATED} {SERVICE_NAME = MyOracleSID}}};用户ID = myUsername;密码= MYPASSWORD;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.