尝试通过 ODBC 连接 - "The network path was not found"

Trying to connect via ODBC - "The network path was not found"

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

<%@ 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

%>

其中 web.config 有:

<connectionStrings>
   <add name="ODBCNAME" connectionString="server=ExampleServerName;" providerName="System.Data.Odbc" />
</connectionStrings>

当我执行这个时,我在 objCOnn.Open() 行收到错误:

System.ComponentModel.Win32Exception: The network path was not found.

ODBC 数据源已创建、测试并与其他独立应用程序(闭源)一起使用,我可以通过 ODBC 设置测试连接,这很有效。

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

如果您尝试使用 ODBC,则需要使用 System.Data.Odbc

此外,确认您的 Data Source 设置正确。这将使一切变得不同。

除非您尝试这些更改,否则很难为您提供更多帮助。让我们知道您的想法,如果您需要,我们很乐意提供帮助。

Oracle 可能是一只狡猾的野兽。

首先,如果您使用的是 ODBC,请使用 OdbcConnection 而不是 SqlConnection

See docs from Microsoft

示例代码改编自上述 MSDN link:

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)

接下来,我建议您使用 Oracle 客户端随附的 Oracle Data Provider for .NET(ODP.NET,又名 Oracle.DataAccess.dll)(尽管并非总是默认安装;您可能需要执行自定义安装),比 ODBC 执行得更好,并且能够利用 Oracle 特定的功能。话虽这么说,如果您想使用 ODBC(当然有一些很好的理由让它像这样通用),请继续阅读:

除了其他建议外,请确保体系结构匹配。这仅适用于您使用的是 64 位机器。

如果是 64 位 OS 和 64 位应用程序,您必须使用 64 位 ODBC 来定义 DSN C:\Windows\System32\odcad32.exe

如果是 64 位 OS 和 32 位应用程序,您必须使用 32 位 ODBC 来定义 DSN C:\Windows\SysWOW64\odbcad32.exe

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

如果是 32 位 OS,则 odbcad32.exe 的位置是默认位置(与 64 位对 64 位相同)并且默认在您的 PATH 中。

如果您的应用将 运行 用于 32 位和 64 位,那么您必须定义两个 DSN,一个用于 32 位,一个用于 64 位。

或者,您可以在项目设置中设置项目的体系结构。默认情况下它可能是 Any CPU 这(我认为)意味着更喜欢本机..所以如果在 64 位 OS 上构建你会得到 64 位 exe,除非你将它更改为 x86或者其他的东西。在 Visual Studio 2015 中,您还可以使用 prefer 32-bit 复选框。

Oracle 客户端也是如此:您必须使用匹配的体系结构。