我正在尝试在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设置测试连接,这是有效的.
如何从我的代码连接到此数据库?或者我该如何调试此问题?
甲骨文可能是一个棘手的野兽。
首先,如果您使用的是 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)
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 客户端也是如此:必须使用匹配的架构。
| 归档时间: |
|
| 查看次数: |
470 次 |
| 最近记录: |