我需要有关涉及数据库的 VB.NET Web 应用程序的帮助。这个应用程序是在数据库中显示一行表列。代码 1 来自 Brian Siler (2000) 的书,它是为 Windows 应用程序编写的,并且运行良好。它允许用户单击一些按钮来检索表中的一行数据。
------------代码1---------
Public Class Form1
Private Sub Form1_Load(sender As System.Object, e As System.EventArgs)
Handles MyBase.Load
End Sub
Private rs As ADODB.Recordset
Public Sub New()
'MyBase.New()
'This call is required by the windows Form Designer
InitializeComponent()
'Add any initialization after the InitializeComponent() call
rs = New ADODB.Recordset()
rs.CursorType = ADODB.CursorTypeEnum.adOpenStatic
rs.Open("SELECT TOP 100 * FROM [Person].[Person]", _
"UID=xxx; PWD=xxx123; DATABASE=AdventureWorks2012;
SERVER=xxx-HP\SQLEXPRESS; Provider=SQLOLEDB")
DisplayCurrentRecord()
End Sub
Private Sub DisplayCurrentRecord()
Dim i As Integer
Dim s As String
If rs.BOF Then rs.MoveFirst()
If rs.EOF Then rs.MoveLast()
lstData.Items.Clear()
For i = 0 To rs.Fields.Count - 1
s = rs.Fields(i).Name & ": " & rs.Fields(i).Value.ToString
lstData.Items.Add(s)
Next i
'Me.Text = "Current Position:" & rs.AbsolutePosition
End Sub
Private Sub cmdNext_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles cmdNext.Click
rs.MoveNext()
DisplayCurrentRecord()
End Sub
Private Sub cmdPrevious_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles cmdPrevious.Click
rs.MovePrevious()
DisplayCurrentRecord()
End Sub
Private Sub cmdJump_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles cmdJump.Click
rs.MoveFirst()
rs.Move(Convert.ToInt32(txtJump().Text) - 1)
DisplayCurrentRecord()
End Sub
End Class
我正在尝试使此代码适用于 Web 应用程序,但我无法获得正确的结果。首先,需要进行一些修改。
- 在代码 2 中,代码之间
#Region
是为了使InitializeComponent()
工作。 MyBase.New()
并且Me.Text = "Current Position:" & rs.AbsolutePosition
需要注释以使代码正常工作。
VB 版本是 2012 Express for Web,Visual Studio 是 2012 Express。添加了 Microsoft ADO 2.7 以供参考。代码 2 可以运行,但只有单击跳转才能产生正确的结果。Prev 和 Next 始终分别显示第一行和第二行。这个问题似乎与sub New
每次单击 prev 或 next 时总是为 Web 应用程序调用有关,因此光标位置始终指向 1。我不明白的另一件事是sub New
vb 中哪个例程调用。显然代码没有明确地调用它。
谢谢您的帮助。
------ 代码 2-----------------
Public Class WebDatabase3
Inherits System.Web.UI.Page
#Region " Web Form Designer Generated Code "
<System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
End Sub
Private designerPlaceholderDeclaration As System.Object
Private Sub Page_Init(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles MyBase.Init
InitializeComponent()
NewSub()
End Sub
#End Region
Private Sub Page_Load(sender As System.Object, e As System.EventArgs)
Handles MyBase.Load
End Sub
Private rs As ADODB.Recordset
Public Sub NewSub()
'MyBase.New()
'This call is required by the windows Form Designer
InitializeComponent()
'Add any initialization after the InitializeComponent() call
rs = New ADODB.Recordset()
rs.CursorType = ADODB.CursorTypeEnum.adOpenStatic
rs.Open("SELECT TOP 100 * FROM [Person].[Person]", _
"UID=xxx; PWD=xxx123; DATABASE=AdventureWorks2012;
SERVER=xxx-HP\SQLEXPRESS; Provider=SQLOLEDB")
DisplayCurrentRecord()
End Sub
Private Sub DisplayCurrentRecord()
Dim i As Integer
Dim s As String
If rs.BOF Then rs.MoveFirst()
If rs.EOF Then rs.MoveLast()
lstData.Items.Clear()
For i = 0 To rs.Fields.Count - 1
s = rs.Fields(i).Name & ": " & rs.Fields(i).Value.ToString
lstData.Items.Add(s)
Next i
'Me.Text = "Current Position:" & rs.AbsolutePosition
End Sub
Private Sub cmdNext_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles cmdNext.Click
rs.MoveNext()
DisplayCurrentRecord()
End Sub
Private Sub cmdPrevious_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles cmdPrevious.Click
rs.MovePrevious()
DisplayCurrentRecord()
End Sub
Private Sub cmdJump_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles cmdJump.Click
rs.MoveFirst()
rs.Move(Convert.ToInt32(txtJump().Text) - 1)
DisplayCurrentRecord()
End Sub
End Class