0

我需要有关涉及数据库的 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 应用程序,但我无法获得正确的结果。首先,需要进行一些修改。

  1. 在代码 2 中,代码之间#Region是为了使InitializeComponent()工作。
  2. 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 Newvb 中哪个例程调用。显然代码没有明确地调用它。

谢谢您的帮助。

------ 代码 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
4

1 回答 1

0

我通过在 Web 应用程序中添加光标位置跟踪器“intAbsolutePosition”解决了这个问题。stackoverflow 代码窗口无法清楚地显示我修改后的代码。对于那个很抱歉。

谢谢!


公共类 WebDatabase3 继承 System.Web.UI.Page

区域“Web 表单设计器生成的代码”

<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

结束区域

Private Sub Page_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
End Sub
Private rs As ADODB.Recordset
Public Shared intAbsolutePosition As Integer = 0
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.CursorLocation = ADODB.CursorLocationEnum.adUseClient
    rs.Open("SELECT TOP 100 * FROM [Person].[Person]", _

"UID=xxx; PWD=xxx123; DATABASE=AdventureWorks2012; SERVER=XXXXX-HP\SQLEXPRESS; Provider=SQLOLEDB") If rs.BOF Then rs.MoveFirst() If rs.EOF Then rs.MoveLast() 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 'rs.Bookmark = ADODB.BookmarkEnum.adBookmarkCurrent End Sub Private Sub cmdNext_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) 处理 cmdNext.Click rs.Move(Convert.ToInt32(intAbsolutePosition) + 1) intAbsolutePosition += 1 DisplayCurrentRecord() End Sub Private Sub cmdPrevious_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) 处理 cmdPrevious。 Click If intAbsolutePosition < 1 Then rs.MoveFirst() Else rs.Move(Convert.ToInt32(intAbsolutePosition) - 1) End If intAbsolutePosition -= 1 If intAbsolutePosition < 0 Then intAbsolutePosition = 0 DisplayCurrentRecord() End Sub Private Sub cmdJump_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) 处理 cmdJump.Click rs.MoveFirst() rs.Move(Convert.ToInt32(txtJump().Text) - 1) intAbsolutePosition = Convert.ToInt32(txtJump()。Text) - 1 DisplayCurrentRecord() End Sub End Class


于 2013-06-11T09:46:23.870 回答