【发布时间】:2017-09-11 05:18:26
【问题描述】:
我在一个表单(Form1)中创建了一个 oracle 数据库连接,并在另一个表单(Form2)中使用相同的连接从数据库中检索一些数据!但是当我尝试将数据检索到第二种形式的标签!
form1的代码如下(可以正常使用!)
public void connection()
{
con = new OracleConnection("Data Source = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST ="+ip.Text+")(PORT ="+port.Text+"))) " +
" (CONNECT_DATA = (SERVER = SHARED) (SERVICE_NAME = ora12c) )" +
" ); User Id =" + uname.Text + "; password=" + pword.Text);
}
private void button1_Click(object sender, EventArgs e)
{
connection();
con.Open();
Form2 f2 = new Form2();
f2.Show();
}
第二种形式的代码2
private void button1_Click(object sender, EventArgs e)
{
Form1 f1 = new Form1();
f1.connection();
f1.con.Open();
OracleCommand cmd = new OracleCommand();
cmd.CommandText = "Select name from username";
cmd.Connection = f1.con;
OracleDataReader dr = cmd.ExecuteReader();
dr.Read();
label1.Text = dr.GetString(0);
}
当我输入详细信息(用户名、密码等)并单击 form1 中的 lgin 按钮时,我可以访问 form2,但在 form2 中,当我单击加载按钮时出现错误
"An unhandled exception of type 'Oracle.DataAccess.Client.OracleException' occurred in Oracle.DataAccess.dll"
高亮 f1.con.Open();
【问题讨论】:
-
告诉我们异常的类型没什么意义,告诉我们 .Message 属性值会更有用..
-
我收到“附加信息:此操作必须打开连接”
-
为什么不能使用它自带的Form2的单独连接?
-
附言;对于它的价值,几乎没有关于这段代码或问题是它应该完成的方式 - 你说你试图在一个表单上建立一个公共连接,但是你有两个表单,你重新创建而不是回收连接,您永远不会关闭它,也不会关闭/处置您的阅读器,并且正确设计的程序在其按钮单击处理程序中永远不会有数据库访问代码。遵循一个关于现代数据库访问方法(nhibernate、实体框架、数据集/表适配器)的好教程将是您现在可以做的最好的事情;扔掉这段代码
-
@ChetanRanpariya 我从 Form1 获得用户名和相关详细信息!所以我必须为 Form2 使用在 Form1 中创建的连接
标签: c# oracle exception connection