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の値を取得しています-最小値を1、最大値を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 に答える