我试图在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设置测试连接,这可以工作。
如何从我的代码连接到此数据库?或者我该如何调试此问题?
答案 0 :(得分:2)
Oracle可能是一个棘手的野兽。
首先,如果您使用的是ODBC,请使用OdbcConnection
而不是SqlConnection
。
从以上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设置是否正确。这将使一切变得不同。
在您尝试这些更改之前,很难为您提供更多帮助。让我们知道您的想法,如果您需要,我们将很乐意为您提供帮助。