尝试通过ODBC连接 - "找不到网络路径"

Dr.*_*che 6 asp.net odbc

我正在尝试在ASP中更新数据库(Oracle通过ODBC):

<%@ Page LANGUAGE="VB"%>
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.SqlClient" %>
<%@ Import Namespace="System.Configuration" %>
<%


Dim objConn As SqlConnection = New SqlConnection(ConfigurationManager.ConnectionStrings("ODBCNAME").ConnectionString)

'example query
Dim strSQL As String = "update foo set bar='BAZ'" 
objConn.Open()
Dim objCmd As New SqlCommand(strSQL, objConn)

Try
    objCmd.ExecuteNonQuery()
    Response.Write("Record updated")
Catch e As Exception
    Response.Write(e.ToString)
End Try

%>
Run Code Online (Sandbox Code Playgroud)

web.config具有以下内容:

<connectionStrings>
   <add name="ODBCNAME" connectionString="server=ExampleServerName;" providerName="System.Data.Odbc" />
</connectionStrings>
Run Code Online (Sandbox Code Playgroud)

当我执行这个时,我得到了objCOnn.Open()行的错误:

System.ComponentModel.Win32Exception: The network path was not found.
Run Code Online (Sandbox Code Playgroud)

ODBC数据源是创建,测试和使用其他独立应用程序(闭源),我可以通过ODBC设置测试连接,这是有效的.

如何从我的代码连接到此数据库?或者我该如何调试此问题?

not*_*ary 2

甲骨文可能是一个棘手的野兽。

首先,如果您使用的是 ODBC,请使用OdbcConnection代替。SqlConnection

请参阅 Microsoft 的文档

示例代码改编自上述 MSDN 链接:

Private Sub InsertRow(ByVal connectionString As String)

    Dim queryString As String = _
        "INSERT INTO Customers (CustomerID, CompanyName) Values('NWIND', 'Northwind Traders')"
    Dim command As New OdbcCommand(queryString)

    Using connection As New OdbcConnection(connectionString)
        command.Connection = connection
        connection.Open()
        command.ExecuteNonQuery()

        ' The connection is automatically closed at 
        ' the end of the Using block.
    End Using
End Sub

Dim connectionString as String = <your connection details here>
InsertRow(connectionString)
Run Code Online (Sandbox Code Playgroud)

Oracle.DataAccess.dll接下来,我建议您使用Oracle 客户端提供的Oracle Data Provider for .NET(ODP.NET,AKA )(尽管默认情况下并不总是安装;您可能需要进行自定义安装),其性能比 ODBC 更好,并且能够利用 Oracle 特定的功能。话虽这么说,如果您想使用 ODBC(当然有一些充分的理由保持它像这样通用),请继续阅读:

除了其他建议之外,还要确保架构匹配。这仅适用于您使用 64 位机器的情况。

如果是 64 位操作系统和 64 位应用程序,则必须使用 64 位 ODBC 来定义 DSNC:\Windows\System32\odcad32.exe

如果是 64 位操作系统和 32 位应用程序,则必须使用 32 位 ODBC 来定义 DSNC:\Windows\SysWOW64\odbcad32.exe

(是的,这些名字真的很令人困惑!SysWOW64基本上意味着在 64 位环境中模拟 32 位。另一个问题是微软odbcad32首先命名了这个东西......也许odbcad会更好,但他们可能必须区分 32 位位和当时的 16 位版本..只是猜测)

如果是 32 位操作系统,则 的位置odbcad32.exe是默认位置(与 64 位上的 64 位相同)并且PATH默认位于您的位置。

如果您的应用程序将在 32 位和 64 位下运行,则您必须定义两个 DSN,一个用于 32 位,一个用于 64 位。

或者,您可以在项目设置中设置项目的架构。默认情况下,它可能Any CPU(我认为)意味着更喜欢本机.. 因此,如果在 64 位操作系统上构建,您将获得 64 位 exe,除非您将其更改为x86或其他内容。在 Visual Studio 2015 中,您还可以使用该prefer 32-bit复选框。

Oracle 客户端也是如此:必须使用匹配的架构。