C#写的Win form 程序,需要读取Oracle数据库信息。
现在:
1.在PL/SQL Developer 中能正常读取Oracle;
2.sqlplus能正常读取Oracle;
3.Net Manage 下测试服务名正常连通;
4.到C#程序里,提示“ORA-12154: TNS:could not resolve service name”;百思不得其解,望哪位高人给解决下.注:以上各种连接都是在同一台机器上连接远程的Oracle。

解决方案 »

  1.   

    帮lZ顶一下,有的使用使用语言连接oracle数据库,并不是数据库本身的问题,有的时候是编程语言的问题,仅供参考
      

  2.   

    C#连接ORACLE的语句贴出来看看!
      

  3.   

    public DataTable GetTableInfo(OracleConnection conn)
    {
    string strSql = "select * from tableA";
    string strTableName = "tableA";
    DataTable dt = null;
                try
                {
                    dt = OracleHelper.ExecuteDataTable(conn, CommandType.Text, strSql , strTableName, null);
                }
                catch (Exception e)
                {
                    string content = e.Message +  "连接字符串:\"" + conn.ConnectionString + "\"";
                    Log.Write(content);
                }
    return dt;
            }
      

  4.   

    public static DataTable ExecuteDataTable(OracleConnection conn, CommandType cmdType, string cmdText, string tablename, params OracleParameter[] commandParameters)
            {
                DataSet inds = new DataSet();
                OracleDataAdapter Da = new OracleDataAdapter(cmdText, conn);
                PrepareCommand(Da.SelectCommand, conn, null, cmdType, cmdText, commandParameters);            Da.Fill(inds, tablename);
                Da.SelectCommand.Parameters.Clear();
                Da.Dispose();
                return inds.Tables[0];
            }
      

  5.   

    OracleHelper用的微软的Petshop里面的
      

  6.   

    直接改成下面的代码也不行:public DataTable GetSensors(OracleConnection conn)
            {
                DataTable table1 = null;
                try
                {
                    table1 = new DataTable();
                    conn.Open();
                    string sql = "select * from BRN_DATA_POINTTABLE";
                    OracleCommand command = new OracleCommand();
                    command.CommandText = sql;
                    command.Connection = conn;
                    OracleDataAdapter adapter = new OracleDataAdapter(command);
                    adapter.Fill(table1);
                }
                catch (Exception e)
                {
                    string content =  e.Message + "连接字符串:\"" + conn.ConnectionString + "\"";
                    Log.Write(2, content);
                }
                return table1;
            }
      

  7.   

    试试在环境变量里添加
    ORACLE_SID=XXXX(SID名)
      

  8.   

    不懂c#,不过看你的代码很奇怪,没看到数据库连接相关的设置啊
    只看到你在调用sql
      

  9.   

    把连接字符串粘贴出来看看,应该是连接字符串的问题。请仔细检查tnsname.ora中配置的SID与安装的数据库SID是否一致,连接字符串中的SID是否与数据库SID一致。
      

  10.   

    建议到c#那里问问 ,不是ora的问题
      

  11.   

    你的c#是用的什么方式连接的oracle数据库odbc.oci, ...
      

  12.   

    试试下面的方法看一下
        #region  类中的全局变量    private OracleConnection sqlcon;  //申明一个SqlConnection对象
        private OracleCommand sqlcom;   //申明一个SqlCommand对象
        private OracleDataAdapter sqldata;   //申明一个SqlDataAdapter对象
        private string ConnStr;    #endregion    #region  构造函数    /// <summary>    /// 构造函数,初始化时连接数据库
        /// </summary>
        public DB_Common()
        {
            string connStr;
            connStr ="Data Source=SID;user=asset;password=trasset;";// 
            sqlcon = new OracleConnection(connStr);
        }    #endregion    #region 打开数据库
        /// <summary>
        /// 打开数据库
        /// </summary>
        public void OpenConn()
        {
            if (this.sqlcon.State != ConnectionState.Open)
                this.sqlcon.Open();
        }
        #endregion
        #region 关闭数据库联接
        /// <summary>
        /// 关闭数据库联接
        /// </summary>
        public void CloseConn()
        {
            if (sqlcon.State == ConnectionState.Open)
                sqlcon.Close();
        }
        #endregion    public DataSet ExceDS(string SqlCom)
        {
            try
            {
                OpenConn();
                sqlcom = new OracleCommand(SqlCom, sqlcon);
                sqldata = new OracleDataAdapter();
                sqldata.SelectCommand = sqlcom;
                DataSet ds = new DataSet();
                sqldata.Fill(ds);
                return ds;
            }
            finally
            {
               // sqlcon.Close();
                CloseConn();
            }
        }
    这样调用
     dataset ds = fn.ExceDS(sql);
    response.writ(ds.table[0].rows.count);