我有一台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();
}
答案 0 :(得分:1)
假设您使用的是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。
答案 1 :(得分:1)
您可能想要尝试以下内容:
连接字符串:
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
。不要忘记,{{1}}是主数据库的名称,而不是其中的一个模式(具有所有表和过程的实体等)。
答案 2 :(得分:1)
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(),但是没有打开连接 - 所以它也失败了,但它现在在外面试着抓。你需要检查
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)));用户标识=名为myUsername;密码= MYPASSWORD;