0

我真的是 ASP.net 的新手,我目前正在尝试在网站上创建一个注册页面。我成功地将用户添加到数据库中,但我决定在代码中添加另一个功能来检查哪些用户 ID 可用。例如,如果用户删除了他们的帐户,他们的用户 ID 将再次可供使用。我试图找到最小值和最大值,并根据它是最小值还是最大值来加或减 1。我可以运行我为此编写的代码而没有错误,但用户没有添加到数据库中。谁能帮我弄清楚我的代码中缺少什么来做到这一点?

编辑 >>>>> 代码将用户添加到数据库,但它在 -1 处添加了新用户。我似乎无法看到问题出在哪里。

If (aDataReader2.Read() = False) Then
  aConnection1 = New OleDbConnection(aConnectionString)
  aConnection1.Open()
  aQuery = "Insert Into UserDetails "
  aQuery = aQuery & "Values ('" & userID & "','" & userFName & "','" & userLName & "','" & userEmail & "','" & userUsername & "','" & userPassword & "')"
  aCommand = New OleDbCommand(aQuery, aConnection1)
  aCommand.ExecuteNonQuery()
  aConnection1.Close()
ElseIf (min = 1) Then
  aConnection2 = New OleDbConnection(aConnectionString)
  aConnection2.Open()
  aCommand = New OleDbCommand(aQuery3, aConnection2)
  aDataReader2 = aCommand.ExecuteReader()
  userID = max + 1
  aQuery = "Insert Into UserDetails "
  aQuery = aQuery & "Values ('" & userID & "','" & userFName & "','" & userLName & "','" & userEmail & "','" & userUsername & "','" & userPassword & "')"
  aCommand = New OleDbCommand(aQuery, aConnection2)
  aCommand.ExecuteNonQuery()
  aConnection2.Close()
Else
  aConnection3 = New OleDbConnection(aConnectionString)
  aConnection3.Open()
  aCommand = New OleDbCommand(aQuery2, aConnection3)
  aDataReader2 = aCommand.ExecuteReader
  userID = min - 1
  aQuery = "Insert Into UserDetails "
  aQuery = aQuery & "Values ('" & userID & "','" & userFName & "','" & userLName & "','" & userEmail & "','" & userUsername & "','" & userPassword & "')"
  aCommand = New OleDbCommand(aQuery, aConnection3)
  aCommand.ExecuteNonQuery()
  aConnection3.Close()
  lblResults.Text = "User Account successfully created"
  btnCreateUser.Enabled = False
End If

这是我用来从数据库中获取最大值和最小值的代码。我得到的值都是 0 - 当 min 应该是 1 而 max 应该是 5

 Dim minID As Integer
 Dim maxID As Integer
 aQuery2 = "Select Min(UserID) AS '" & [minID] & "' From UserDetails"
 aQuery3 = "Select Max(UserID) AS ' " & [maxID] & "' From UserDetails"
4

1 回答 1

1

很难说到底是什么问题,因为我们只看到了其中的一部分。最小值和最大值从何而来?

我不能给你一个解决方案,但是,我建议你更好地构建你的代码。你有很多(!)冗余代码。这使得代码难以阅读、理解、更改和测试。

将用户数据放入一个类中。这比许多单独的变量更容易处理。

Public Class User
    Public Property ID As Integer
    Public Property FirstName As String
    Public Property LastName As String
    Public Property EMail As String
    Public Property Username As String
    Public Property Password As String
End Class

将冗余代码提取到子程序中

Private Sub CreateUser(ByVal u As User)
    Const InsertQuery As String = _
        "INSERT INTO UserDetails VALUES ({0},'{1}','{2}','{3}','{4}','{5}')"

    Dim query As String = String.Format(InsertQuery, u.ID, u.FirstName, u.LastName, _
                                                     u.Email, u.Username, u.Password)
    Using conn As New OleDbConnection(aConnectionString)
        conn.Open()
        Dim cmd As New OleDbCommand(query, conn)
        cmd.ExecuteNonQuery()
    End Using
End Sub

然后代码变成这样

If Not aDataReader2.Read() Then
    CreateUser(user)
ElseIf min = 1 Then
    ...
    user.userID = max + 1
    CreateUser(user)
Else
    ...
    user.userID = min - 1
    CreateUser(user)
    lblResults.Text = "User Account successfully created"
    btnCreateUser.Enabled = False
End If

现在看起来好多了。

(我的代码没有经过测试,只是给你一个想法。)


更新

您不能像这样读取最小值和最大值。尝试这样的事情

Dim min, max As Integer

Using conn As New OleDbConnection(aConnectionString)
    Dim cmd As OleDbCommand = _
        New OleDbCommand("SELECT MIN(UserID), MAX(UserID) FROM UserDetails", conn)
    conn.Open()
    Using reader As OleDbDataReader = cmd.ExecuteReader()
        reader.Read()
        If reader.IsDBNull(0) Then
            ' The table is empty
            min = 1
            max = 1
        Else
            min = reader.GetInt32(0)
            max = reader.GetInt32(1)
        End If
    End Using
End Using
于 2012-12-02T22:42:12.593 回答