使用C#连接到Oracle APEX数据库

时间:2016-11-24 14:22:27

标签: c# oracle oracle-apex

我有一个名为“sistema”的数据库,使用应用程序apex express,我正在尝试连接此代码:

private void button1_Click(object sender, EventArgs e)
{
    string constr = "Data Source=sistema;User Id=admin;Password=123;";
    string ProviderName = "Oracle.ManagedDataAccess.Client";

    using (OracleConnection conn = new OracleConnection(constr))
    {
        try
        {
            conn.ConnectionString = constr;
            conn.Open();

            //Get all the schema collections and write to an XML file. 
            //The XML file name is Oracle.ManagedDataAccess.Client_Schema.xml
            DataTable dtSchema = conn.GetSchema();
            dtSchema.WriteXml(ProviderName + "_Schema.xml");

            MessageBox.Show("YEAH");

        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
            MessageBox.Show(ex.StackTrace);
        }
    } 
}

此代码显示此错误:

ORA-12154: TNS could not resolve the specified connection identified

使用这个新代码:

    private void button1_Click(object sender, EventArgs e)
    {
        string constr = @"Data Source=(DESCRIPTION=
(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost )(PORT=1521)))
(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=SISTEMA)));
User Id=ADMIN ;Password=123";
        string ProviderName = "Oracle.ManagedDataAccess.Client";

        using (OracleConnection conn = new OracleConnection(constr))
        {
            try
            {
                conn.ConnectionString = constr;
                conn.Open();

                //Get all the schema collections and write to an XML file. 
                //The XML file name is Oracle.ManagedDataAccess.Client_Schema.xml
                DataTable dtSchema = conn.GetSchema();
                dtSchema.WriteXml(ProviderName + "_Schema.xml");

                MessageBox.Show("YEAH");

            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
                MessageBox.Show(ex.StackTrace);
            }
        } 
    }

它让我回头

User id 'is an invalid connection string attribute

当我尝试从VS连接到数据库时,我收到此错误:

The listener does not currently know the requested service

数据库在Oracle Apex http://localhost:8080/apex上正常工作,并创建了表和记录 也可以尝试使用大写和小写名称而不做任何更改

我不明白如何在应用程序快递中连接到我的Oracle Apex数据库,这很令人困惑,我不知道在oracle中对于普通数据库有什么改变。

如何在c#中连接到我的apex数据库?

2 个答案:

答案 0 :(得分:0)

问题是你没有把tns标识符放在正确的位置。如果您已从nuget添加了oracle管理数据访问包,那么您的应用程序配置/ Web配置中将添加一个配置行。

<oracle.manageddataaccess.client>
    <version number="*">
      <dataSources>
        <dataSource alias="SampleDataSource" 
                    descriptor="(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=localhost)(PORT=1521))
                    (CONNECT_DATA=(SERVICE_NAME=ORCL))) " />
      </dataSources>
    </version>
  </oracle.manageddataaccess.client>

Edi是“sistema”的别名,并将您的tns连接标识符放在描述符上。像这样

<dataSource alias="sistema" 
            descriptor="(DESCRIPTION=
(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost )(PORT=1521)))
(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=SISTEMA))) " />
          </dataSources>

并使用您的第一次尝试连接字符串。这将解决TNS识别错误。

答案 1 :(得分:0)

OracleConnection无法解析别名。根据{{​​3}},有几种可能性按以下顺序解析名称:

  1. .NET配置文件中dataSources部分下的<oracle.manageddataaccess.client>部分中的数据源别名(即machine.configweb.configuser.config) 。

    - &GT; 这已由yonas在之前的回答中提供

  2. .NET配置文件中tnsnames.ora指定位置的TNS_ADMIN文件中的数据源别名。位置可以包含绝对或相对目录路径。
  3. tnsnames.ora位于同一目录中的.exe文件中的数据源别名。
  4. 实际上文档并不完全正确,或者让我们说'#34;不彻底&#34;。仅当您使用本地tnsnames.ora文件时,第2项和第3项才适用。但是,在文件sqlnet.ora中,您可以指定不同的NAMES.DIRECTORY_PATH,例如LDAPEZCONNECT

    所以,实际上它应该是这样的

    1. tnsnames.ora文件中的数据源别名。 sqlnet.ora文件中定义的命名方法,位于.NET配置文件中TNS_ADMIN指定的位置。位置可以包含绝对或相对目录路径。
    2. tnsnames.ora文件中的数据源别名。 sqlnet.ora 文件中定义的命名方法与.exe存在于同一目录中。