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

时间:2015-10-28 12:39:36

标签: 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

%>

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设置测试连接,这可以工作。

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

2 个答案:

答案 0 :(得分:2)

Oracle可能是一个棘手的野兽。

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

See docs from 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)

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

除了其他建议外,请确保架构匹配。这仅适用于您在64位盒子上的情况。

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

如果是64位操作系统和32位应用程序,则必须使用32位ODBC来定义DSN C:\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位操作系统上构建,除非将其更改为x86或其他内容,否则将获得64位exe。在Visual Studio 2015中,您还可以使用prefer 32-bit复选框。

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

答案 1 :(得分:0)

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

此外,请验证您的Data Source设置是否正确。这将使一切变得不同。

在您尝试这些更改之前,很难为您提供更多帮助。让我们知道您的想法,如果您需要,我们将很乐意为您提供帮助。