就自己开发的程序出问题了:我用的是Oracle.DataAccess.dll,
连接串如下:            string connstringFormat = "Data Source=(DESCRIPTION="
                                    + "(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=127.0.0.1)(PORT=1521)))"
                                    + "(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=ORCL.RUIJC)));"
                                    + "User Id={0};Password={1};"; 
出错提示:ORA-12737: Instant Client Light: unsupported server character set %s
,在google找了半天都没找到解决办法啊。

解决方案 »

  1.   


    数据库装的是Oracle10g,我用odp.net 11.0来连接,是不是非要版本对应才行么?
      

  2.   

    Microsoft has deprecated System.Data.OracleClient, so here's a simple example of using the new ODP.NET Oracle.DataAccess.Client, with the following benefits:
    * Simple Xcopy deployment
    * No Oracle [instant] client installation needed
    * No TnsNames.Ora file neededFirstly, download the ~200mb ODP.Net from Oracle. Don't freak out, you won't need to redistribute *all* this with your app, just ~30megs worth. I used this version [link] but you'll probably want to get the latest version [link].
    Grab Oracle.DataAccess.dll from:
    ODAC1110710beta.zip \ stage \ Components \ oracle.ntoledb.odp_net_2 \ 11.1.0.7.10 \ 1 \ DataFiles \ filegroup4.jar
    Copy it into your project (For winforms: the same folder as your project's Program.cs; For Asp.net: the Bin folder). In Visual Studio, right click references and add the Oracle.DataAccess.dll.
    Write some code like this in your app:
    using Oracle.DataAccess.Client; // This goes up the top
    ...
    string connstring =
      "Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=myhost)(PORT=1527))" +
      "(CONNECT_DATA=(SID=mysid)));User Id=myuserid;Password=mypassword;";
    using (OracleConnection conn = new OracleConnection(connstring))
    {
      conn.Open();
      string sql = "select distinct owner from sys.all_objects order by owner";
      using (OracleCommand comm = new OracleCommand(sql, conn))
      {
        using (OracleDataReader rdr = comm.ExecuteReader())
        {
          while (rdr.Read())
          {
            Console.WriteLine(rdr.GetString(0));
          }
        }
      }
    }
    You'll then need the following dll's to be placed in the same folder as your EXE:
    * oci.dll (Find 'oci.dll.dbl' and rename it to remove the '.dbl'; in ODAC1110710beta.zip \ stage \ Components \ oracle.rdbms.rsf.ic \ 11.1.0.7.0 \ 1 \ DataFiles \ filegroup2.jar)
    * Oracle.DataAccess.dll (in ODAC1110710beta.zip \ stage \ Components \ oracle.ntoledb.odp_net_2 \ 11.1.0.7.10 \ 1 \ DataFiles \ filegroup4.jar)
    * oraociicus11.dll (in ODAC1110710beta.zip \ stage \ Components \ oracle.rdbms.ic \ 11.1.0.7.0 \ 1 \ DataFiles \ filegroup3.jar)
    * OraOps11w.dll (in ODAC1110710beta.zip \ stage \ Components \ oracle.ntoledb.odp_net_2 \ 11.1.0.7.10 \ 1 \ DataFiles \ filegroup3.jar)
    You may need the following dll's, but I didn't. I'd get them anyway, just to be safe, as some people say they're needed:
    * orannzsbb11.dll (in ODAC1110710beta.zip \ stage \ Components \ oracle.ldap.rsf.ic \ 11.1.0.7.0 \ 1 \ DataFiles \ filegroup1.jar)
    * oraocci11.dll (in ODAC1110710beta.zip \ stage \ Components \ oracle.rdbms.rsf.ic \ 11.1.0.7.0 \ 1 \ DataFiles \ filegroup3.jar)
    * ociw32.dll (called 'ociw32.dll.dbl' in ODAC1110710beta.zip \ stage \ Components \ oracle.rdbms.rsf.ic \ 11.1.0.7.0 \ 1 \ DataFiles \ filegroup2.jar)
    If you get the exception 'The provider is not compatible with the version of Oracle client', don't stress, simply retrace your steps and make sure you get ALL those DLL's from the same ODP.Net / ODAC distribution to avoid version number conflicts, and put them all in the same folder as your EXE (or, in the Bin folder if its an Asp.Net application, then try restarting IIS).
    If you download a newer version of ODP.Net, the jar files that enclose the dll's may have moved, so you'll have to manually search through them all, don't worry it won't take *too* long!
    Good luck!
      

  3.   

    终于找到问题了,是版本不对应,我把ODP.NET 10的dll复制到exe目录下就没问题啦,谢谢java3344520,能问一下访问特定版本的Oracle,是不是要下载相对应的ODP.NET版本才行?期待回复,谢谢。