我写了个类DBcon.cs,主要读取XML获取数据库连接串using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data.OracleClient;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Web;
using System.Xml;namespace test
{
    class DBcon
    {         
        public OracleConnection DataOpen()
            {
                string USERID, PASSWORD, DATASOURCE;
                XmlTextReader reader = new XmlTextReader(".\\dataconfig.xml");
                DataSet myDs = new DataSet();
                myDs.ReadXml(reader);
                DataRow myDataRow = myDs.Tables[0].Rows[0];
                USERID = myDataRow["userid"].ToString();
                PASSWORD = myDataRow["password"].ToString();
                DATASOURCE = myDataRow["DataSource"].ToString();
                string sqlString = "Data Source=" + DATASOURCE + ";user id=" + USERID + ";password =" + PASSWORD + "";
                OracleConnection con = new OracleConnection(sqlString);
                //myDs.Dispose();
                //con.Open();
                return con ;
                              
                          
        }           
    }
}
通过另外一个窗体去调用上面类的值:
 private void button1_Click(object sender, EventArgs e)
        {
            if (names.Text.Trim() == "")
            {
                MessageBox.Show("用户名不能为空!", "提示信息");
                names.Focus();
                return;
            }
            if (pwd.Text.Trim() == "")
            {
                MessageBox.Show("密码不能为空!", "提示信息");
                pwd.Focus();
                return;
            }
            int i = 0;
            DBcon conn = new DBcon();//通过方法调用
            conn.DataOpen();
            OracleConnection connection = new OracleConnection();
            connection.Open();//提示ConnectionString 属性尚未初始化
                    
            {
                string sql = "select count(*) from PACSUSER where test01='" + names.Text.Trim() + "' and test02='" + password1 + "'";
                using (OracleCommand cmd = connection.CreateCommand())
                {
                  cmd.CommandText = sql;                   
                  i = (int)Convert.ToInt32(cmd.ExecuteScalar());
                }
            }
            if (i > 0)
            {
                bl = true;                        
                this.Close();
                MainForm MF = new MainForm();
                MF.Show();
                //con.Close();               
            }
            else
            {
                MessageBox.Show("用户名或密码错误!请重新登陆!", "提示信息");
            }
        }
         private void Form1_FormClosed(object sender, FormClosedEventArgs e)
        {
            if (!bl)
            {
                Application.Exit();
            }
        }从报错来看是没有获取到方法中的数据库连接串,但我不知道为什么没有获取到,麻烦大虾帮忙指点!!

解决方案 »

  1.   

    OracleConnection connection = conn.DataOpen(); 你那样根本没有获得连接啊
      

  2.   

    //            DBcon conn = new DBcon();//通过方法调用 
    //            conn.DataOpen(); 
    //            OracleConnection connection = new OracleConnection(); 
                OracleConnection connection = new DBcon().DataOpen();
      

  3.   

    如下:DBcon conn = new DBcon();//通过方法调用 
    OracleConnection connection = conn.DataOpen(); 
    connection.Open();//提示ConnectionString 属性尚未初始化 
      

  4.   

    这几句改改:
              DBcon conn = new DBcon();//通过方法调用 
              OracleConnection connection = conn.DataOpen(); 
             connection.Open();
      

  5.   

    非常感谢
    按照你们说的修改后
    OracleConnection connection = new DBcon().DataOpen();
    connection.Open();//提示ORA-12154: TNS: 无法解析指定的连接标识符
      

  6.   

            DBcon conn = new DBcon();//通过方法调用 
                conn.DataOpen(); 
                OracleConnection connection =   conn.DataOpen(); 
        不需要在打开了..
    你在conn.DataOpen(); 方法中已经打开过了.而且该方法返回一个已经打开的连接,
    你OracleConnection connection = new OracleConnection(); 
      的时候实例了另外一个空连接
      

  7.   


           DBcon conn = new DBcon();//通过方法调用 
             //   conn.DataOpen(); 
            OracleConnection connection =  conn.DataOpen(); 
             //   connection.Open();//提示ConnectionString 属性尚未初始化这样就OK了
      

  8.   


    按照你说的修改后在下面报错了
    using (OracleCommand cmd = connection.CreateCommand()) 
                    { 
                      cmd.CommandText = sql;                  
                      i = (int)Convert.ToInt32(cmd.ExecuteScalar()); //无效操作。连接被关闭。
                    } 
                } 
    无效操作。连接被关闭。
      

  9.   

    using (OracleCommand cmd = new OracleCommand() ) 
                    { 
                     cmd.Connection  =    connection ;       
                       cmd.CommandText = sql;                  
                      i = (int)Convert.ToInt32(cmd.ExecuteScalar()); 
                    } 
      

  10.   


    按照你的修改后还是提示
     i = (int)Convert.ToInt32(cmd.ExecuteScalar()); //无效操作。连接被关闭。
      

  11.   


    你指的是哪块的connectionstring?