私は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
デバッグ> Windows>ローカル。しかし、あなたのクエリは文字列や変数を渡していないので、列 'username'をそれ自身と比較しています。これはすべての行を返します。 –
これをpageLoadで呼び出すと、SQLで何が見られているのでしょうか? Dim userID As Integer = GetUserID(System.Web.HttpContext.Current.User.Identity.Name) –
私が言っていることに焦点を当てると、ページロードとは関係ありません。 'username = userNameのユーザーからUserIDを選択します.'これらの2つのユーザー名値は列参照です。データはこのクエリに渡されていません。ユーザー名列がそれと等しいユーザーIDを選択しています。いつもそうです。したがって、なぜあなたはテーブルの最新のレコードIDを取得します。 SQLで試してみてください。 vbコードのパラメータとして "@username"を使用する必要があります。 –