我有一个名为“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数据库?
答案 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}},有几种可能性按以下顺序解析名称:
.NET配置文件中dataSources
部分下的<oracle.manageddataaccess.client>
部分中的数据源别名(即machine.config
,web.config
,user.config
) 。
- &GT; 这已由yonas在之前的回答中提供
tnsnames.ora
指定位置的TNS_ADMIN
文件中的数据源别名。位置可以包含绝对或相对目录路径。tnsnames.ora
位于同一目录中的.exe
文件中的数据源别名。实际上文档并不完全正确,或者让我们说'#34;不彻底&#34;。仅当您使用本地tnsnames.ora
文件时,第2项和第3项才适用。但是,在文件sqlnet.ora
中,您可以指定不同的NAMES.DIRECTORY_PATH
,例如LDAP
或EZCONNECT
。
所以,实际上它应该是这样的
tnsnames.ora
文件中的数据源别名。 sqlnet.ora
文件中定义的命名方法,位于.NET配置文件中TNS_ADMIN
指定的位置。位置可以包含绝对或相对目录路径。tnsnames.ora
文件中的数据源别名。 sqlnet.ora
文件中定义的命名方法与.exe
存在于同一目录中。