尝试通过 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
。
示例代码改编自上述 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 客户端也是如此:您必须使用匹配的体系结构。
我正在尝试更新 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
。
示例代码改编自上述 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 客户端也是如此:您必须使用匹配的体系结构。