【发布时间】:2013-06-25 14:38:02
【问题描述】:
我被要求更新一个旧的 VB.NET Web 应用程序,这不是我最喜欢的技术,我更像是一个桌面用户。不管怎样,我正在努力解决它!
我遇到了一个我无法解决的问题(如果问题很奇怪,请原谅我)。首先,该代码在生产环境中运行良好,因为这是客户端源代码。当我以调试模式启动站点时,它在 VS 中也能正常工作。一旦我将网站发布到本地 IIS,页面就会失败
App_Code 文件夹包含一个 Database.vb 文件,其中包含一个 Database 类,方法如下:
Option Strict On
Imports System.Text
Imports System.Data
Imports System.Data.SqlClient
Imports System.Web.Caching
Imports System.Collections
Public Class Database
Public Shared Sub ExecuteDataTable(ByVal strSQL As String, ByRef dt As DataTable)
...
End SUb
我有一个包含以下代码的 ASPX 页面
<script runat="server">
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
LoadGrid()
End Sub
Private Sub LoadGrid()
Dim strSQL As String = "sp_XXXXXXXXXXXXXXXXXXX"
Dim dt As New System.Data.DataTable
Database.ExecuteDataTable(strSQL, dt)
grd_Data.DataSource = dt
grd_Data.DataBind()
End Sub
</script>
在本地调试中一切正常,但只要我在本地 IIS7 上发布网站,我就会收到此错误:
Server Error in '/' Application.
Compilation Error
Compiler Error Message: BC30456: 'Database' is not a member of '<Default>'.
Line 18: Global.Database.ExecuteDataTable(strSQL, dt)
注意事项:
数据库类在项目中随处使用并且工作正常。我在这里注意到的唯一区别是代码位于 aspx 文件中,使用脚本 runat="server" 而不是通常的 .vb 文件。不确定它是否会导致问题,因为它在本地运行良好。
我尝试在第 18 行使用 Global.Database,但遇到了同样的问题。
解决方案的目标框架是v4.0。 IIS7中的应用程序池也设置为v4.0
任何帮助我解决这个问题的想法/线索将不胜感激:)
提前致谢!
【问题讨论】:
-
旁注:如果我是you,我会失去
sp_前缀:“在命名程序时避免使用sp_前缀。这个前缀是SQL Server 用来指定系统过程。如果存在同名的系统过程,使用前缀会导致应用程序代码中断。" -
没错,这就是我通常实际做的事情,但我宁愿让这个应用程序在重命名数百个存储过程之前使用当前代码运行;)