2017-12-04 5 views
1

私はUserIDを取得するためにSQLクエリを実行するGetUSerID関数を持っています。クエリは機能し、ユーザーIDを返しますが、 WHERE条件。 ITは単にユーザーテーブルの中で最も高いユーザーIDを返します。 (私はこれをテストして、新しいユーザーを追加して(つまり、最高のユーザーIDを変更してから)再度ログインして、表示されたユーザーIDが最高のユーザーIDになりました。 "WHERE username ="が適用されていません。ユーザー名を取得するために使用しているプロセスがわかります。varibaleとして宣言してそのまま表示すると、ユーザー名は正しいですが表示されません。そのユーザー名と共に使用されるuseRIDどのようなクエリがVB.netコードからSQLに渡されているか確認する方法

私は、アプリケーションを実行している間にSQLに渡されている正確なクエリを表示する方法を探しています。Visual Studio 2015でSQLを実行するにはデバッグモードで何かトレースや何か?

コードは...

Private Function GetUserID(userName As String) As Integer 
    Dim userId As Integer 
    Using con As New SqlConnection("Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\BandDatabase.mdf;Integrated Security=True") 
     Dim comm As New SqlCommand("select UserID from Users where username = userName", con) 
     comm.Parameters.AddWithValue("userName", userName) 
     comm.CommandType = CommandType.Text 
     con.Open() 
     Try 
      Dim reader As SqlDataReader = comm.ExecuteReader() 
      If reader.HasRows Then 
       While (reader.Read) 
        userId = reader.GetInt32(0) 
       End While 
       reader.Close() 
       Return userId 
      Else 
       'no user found 
       Return -1 
      End If 
     Catch e As Exception 
      Throw New Exception("An exception has occurred: " + e.Message) 
     Finally 
      con.Close() 
     End Try 
    End Using 
End Function 

私は...私はこのようにそれを呼び出すことができbecuaseユーザ名は、作品

userName = System.Web.HttpContext.Current.User.Identity.Name 

を知っていて、それが正しい名前をピックアップ。

しかし、私は(下図のように)

Sub Page_Load(ByVal Sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 

    Dim userID As Integer = GetUserID(System.Web.HttpContext.Current.User.Identity.Name) 

    'Displays a correct looking userID but not sure it is updating correctly 
    lblStudent.Text = userID 
End Sub 
+1

デバッグ> Windows>ローカル。しかし、あなたのクエリは文字列や変数を渡していないので、列 'username'をそれ自身と比較しています。これはすべての行を返します。 –

+0

これをpageLoadで呼び出すと、SQLで何が見られているのでしょうか? Dim userID As Integer = GetUserID(System.Web.HttpContext.Current.User.Identity.Name) –

+3

私が言っていることに焦点を当てると、ページロードとは関係ありません。 'username = userNameのユーザーからUserIDを選択します.'これらの2つのユーザー名値は列参照です。データはこのクエリに渡されていません。ユーザー名列がそれと等しいユーザーIDを選択しています。いつもそうです。したがって、なぜあなたはテーブルの最新のレコードIDを取得します。 SQLで試してみてください。 vbコードのパラメータとして "@username"を使用する必要があります。 –

答えて

2

は、パラメータを使用して続行するには...それだけで最高のユーザーIDを拾っている....表示するには、ページの読み込み中に私の関数を呼び出す、使用のパラメータが正しく設定されています。あなたは結果を反復処理するため、クエリがちょうどテーブル全体を返す形

SELECT A.B FROM A WHERE A.C = A.C 

に単純で、あなたのコードでは、@なく追加@

Dim comm As New SqlCommand("select UserID from Users where username = @userName", con) 
comm.Parameters.AddWithValue("@userName", userName) 

に注意し、最後を返します1つは、テーブルの最後の行のUserIDを返すだけです。

関連する問題