我正在使用:
我尝试安装'Oracle Developer Tools for Visual Studio'并在我的C:\ app \ [我的用户名] \ product \ 11.2.0 \ client_1 \ Network \ Admin目录中创建了tnsnames.ora和sqlnet.ora文件。
他们看起来像这样:
# tnsnames.ora
ORATEST =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = dbs-oratest)(PORT = 1521))
)
(CONNECT_DATA =
(SID = [ORATEST])
)
)
和
# sqlnet.ora
SQLNET.AUTHENTICATION_SERVICES= (ALL)
NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT)
当我尝试使用.Net Framework数据提供程序for Oracle驱动程序来设置新连接(或任何其他驱动程序:OLE,ODBC等)时,它会给出错误:
ORA-12154:TSN:无法解析指定的连接标识符
在没有的机器上使用OLE驱动程序安装了Oracle客户端但是可以工作:
OleDbConnection conn = new OleDbConnection(
"Provider=MSDAORA;Data Source=ORATEST;" +
"Persist Security Info=True;Password=readonly;User ID=readonlyuser");
我做错了什么?在线是否有关于如何安装基本Oracle驱动程序的简单说明?
提前谢谢!
答案 0 :(得分:4)
我找到的最佳解决方案是使用Oracle数据访问客户端库,并在连接字符串中包含整个TNS名称条目。这允许项目轻松发布到Web服务器,ClickOnce等。
以下是在项目中设置Oracle驱动程序所需的步骤:
1)从“Oracle Data Provider for .NET”软件包中获取DLL
从此位置下载安装程序文件:http://www.oracle.com/technetwork/topics/dotnet/index-085163.html
我继续使用适用于Visual Studio的Oracle Developer Tools安装了完整的200 MB ODAC,但您只需要从此下载中获得四个DLL。 (您可以直接从安装程序包中提取它们,而不是通过整个安装过程,或者可能是较小的下载之一包含所有这些。)
2)项目中的参考DLL
搜索Oracle Data Access Client的安装目录,并将以下四个DLL拖到项目的根目录中:
将复制到输出目录属性设置为除Oracle.DataAccess.dll之外的所有文件始终复制。
在项目下 - > 添加引用... ,单击浏览选项卡,然后选择Oracle.DataAccess.dll文件。
3)使用带有完整连接字符串的驱动程序(可选)
为了不必担心在部署应用程序的机器上设置TNS名称文件,我将整个定义放在文件中,如connectionstrings.com所示。它使连接字符串有点笨重,但删除了我之前遇到的很多TNS名称文件头痛:
Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=servername)(PORT=1521)))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=servicename)));User Id=username;Password=********;
这是我用来测试驱动程序的完整类:
using System;
using System.Data;
using Oracle.DataAccess.Client;
static class Program
{
[STAThread]
static void Main()
{
TestOracle();
}
private static void TestOracle()
{
string connString =
"Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)" +
"(HOST=servername)(PORT=1521)))" +
"(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=servicename)));"+
"User Id=username;Password=********;";
using (OracleConnection conn = new OracleConnection(connString))
{
string sqlSelect = "SELECT * FROM TEST_TABLE";
using (OracleDataAdapter da = new OracleDataAdapter(sqlSelect, conn))
{
var table = new DataTable();
da.Fill(table);
if (table.Rows.Count > 1)
Console.WriteLine("Successfully read oracle.");
}
}
}
}
答案 1 :(得分:1)
您应该使用Oracle Data Access Client库,然后使用OracleConnection对象。
http://www.oracle.com/technology/sample_code/tech/windows/odpnet/howto/connect/index.html
我知道Oracle对TNS名称文件有点挑剔。我通常依靠DBA来做这件事。 SQL-Server更容易上手......
答案 2 :(得分:0)
使用本地IIS Web服务器而不是Visual Studio开发服务器(项目设置 - WEB)为我做了诀窍!
Tns-12154让我把头发拉出来...网站在VS2008中工作得很好......
此致
麦克
答案 3 :(得分:0)
我使用的代码就是上面的代码。
P.S。:我已多次测试过。使用Visual Studio .Net 2010(VB.Net 2010)。
Dim conn As New Odbc.OdbcConnection
Dim cmd As New Odbc.OdbcCommand
Dim drResult As Odbc.OdbcDataReader
Dim connString As String
Dim QuerySQL As String
connString = "Driver={Microsoft ODBC for Oracle};CONNECTSTRING=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=ORACLEDB01)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=ORACLE_INSTANCE_NAME)));Uid=john;Pwd=mypassword;"
QuerySQL = "select first_name, last_name from employees where id = 28"
conn.ConnectionString = connString
conn.Open()
cmd.Connection = conn
cmd.CommandText = QuerySQL
drResult = cmd.ExecuteReader()
While drResult.Read
TextBox1.Text = TextBox1.Text & drResult("last_name") & ", " & drResult("first_name") & Environment.Newline
End While
drResult.Close()