2

これが何が起こっているかです、ユーザーがログインしている場合-これはPage_Loadから直接呼び出されます

Protected Sub EnterNewTransInDb()
        Dim conn As New SqlConnection(ConfigurationManager.ConnectionStrings("connstring").ConnectionString)
        Dim comm As New SqlCommand("INSERT INTO tblRegisterRedirect (RegID , UserID, EventID, TimeStamp) VALUES (@RegID, @UserID, @EventID , getdate()) ;", conn)

        Dim RegID As Guid
        RegID = Guid.NewGuid()
        Dim GIUDuserid As Guid
        GIUDuserid = New Guid(HttpContext.Current.Request.Cookies("UserID").Value.ToString())
        Dim GIUDevnetid As New Guid(HttpContext.Current.Request.QueryString("id").ToString())
        comm.Parameters.AddWithValue("@RegID", RegID)
        comm.Parameters.AddWithValue("@UserID", GIUDuserid)
        comm.Parameters.AddWithValue("@EventID", GIUDevnetid)

        Try
            conn.Open()
            Dim i As Integer = comm.ExecuteNonQuery()
            conn.Close()
        Catch ex As Exception
            Dim errors As String = ex.ToString()
        End Try
        Dim URL As String = Request.QueryString("url").ToString()
        Response.Redirect(URL + "?aid=854&rid=" + RegID.ToString())
    End Sub

これはうまく機能しますが、ログインしていない場合は、ログイン資格情報を入力します-これはButton_Clickイベントで発生し、クリックイベントでこの関数を呼び出します。今回EnterNewTransInDb()実行すると、ログイン後に-同じコード、例外をスローします-オブジェクト参照はnullです-クエリ文字列を参照しています

 Protected Sub btnLogin_Click(sender As Object, e As System.EventArgs) Handles btnLogin.Click
      'took out code SqlConnection onnection and SqlDataReader Code
        dbCon.Open()            

        'If Email and PW are found
        If dr.Read Then
            Dim appCookie As New HttpCookie("UserID")
            appCookie.Value = dr("GUID").ToString()
            appCookie.Expires = DateTime.Now.AddDays(30)
            HttpContext.Current.Response.Cookies.Add(appCookie)

            Dim appCookie1 As New HttpCookie("UserName")
            appCookie1.Value = dr("UserName").ToString
            appCookie1.Expires = DateTime.Now.AddDays(30)
            HttpContext.Current.Response.Cookies.Add(appCookie1)

            Dim appCookie2 As New HttpCookie("UserEmail")
            appCookie2.Value = txtEmail.Text.ToLower()
            appCookie2.Expires = DateTime.Now.AddDays(30)
            HttpContext.Current.Response.Cookies.Add(appCookie2)

            Dim appCookie3 As New HttpCookie("Lat")
            appCookie3.Value = dr("GeoLat").ToString()
            appCookie3.Expires = DateTime.Now.AddDays(30)
            HttpContext.Current.Response.Cookies.Add(appCookie3)

            Dim appCookie4 As New HttpCookie("Long")
            appCookie4.Value = dr("GeoLong").ToString()
            appCookie4.Expires = DateTime.Now.AddDays(30)
            HttpContext.Current.Response.Cookies.Add(appCookie4)

            Dim appCookie5 As New HttpCookie("City")
            appCookie5.Value = dr("City").ToString()
            appCookie5.Expires = DateTime.Now.AddDays(30)
            HttpContext.Current.Response.Cookies.Add(appCookie5)

            Dim appCookie6 As New HttpCookie("State")
            appCookie6.Value = dr("State").ToString
            appCookie6.Expires = DateTime.Now.AddDays(30)
            HttpContext.Current.Response.Cookies.Add(appCookie6)

            HttpContext.Current.Response.Cookies("EO_Login").Expires = Now.AddDays(30)
            HttpContext.Current.Response.Cookies("EO_Login")("EMail") = txtEmail.Text.ToLower()

            Dim sUserData As String = HttpContext.Current.Server.HtmlEncode(HttpContext.Current.Request.Cookies("UserID").Value) & "|" & HttpContext.Current.Server.HtmlEncode(HttpContext.Current.Request.Cookies("UserName").Value) & "|" & HttpContext.Current.Server.HtmlEncode(HttpContext.Current.Request.Cookies("UserEmail").Value)
            ' Dim sUserData As String = "dbcf586f-82ac-4aef-8cd0-0809d20c70db|scott selby|scottselby@live.com"
            Dim fat As FormsAuthenticationTicket = New FormsAuthenticationTicket(1, _
                     dr("UserName").ToString, DateTime.Now, _
                     DateTime.Now.AddDays(6), True, sUserData, _
                     FormsAuthentication.FormsCookiePath)
            Dim encTicket As String = FormsAuthentication.Encrypt(fat)
            HttpContext.Current.Response.Cookies.Add(New HttpCookie(FormsAuthentication.FormsCookieName, encTicket))

            'If Email and Pw are not found
        Else
            dr.Close()
            dbCon.Close()

        End If

        'Always do this
        dr.Close()
        sSql = "UPDATE eo_Users SET LastLogin=GETUTCDATE() WHERE GUID=@GUID; "
        cmd = New SqlCommand(sSql, dbCon)
        cmd.Parameters.AddWithValue("@GUID", HttpContext.Current.Session("UserID"))
        cmd.ExecuteNonQuery()
        dbCon.Close()
        EnterNewTransInDb()
        'Dim URL As String = Request.QueryString("url").ToString()
        'Response.Redirect(URL + "?aid=854&rid=" + RegID.ToString())
    End Sub
4

3 に答える 3

0

呼び出しの前にブレークポイントを設定して、変数に値が割り当てられていることを確認してください。

于 2012-10-09T02:10:15.283 に答える
0

有効な QueryString がある場合にのみこのコードを実行すると仮定すると、メソッドの先頭にガード句を配置して、QueryString が null かどうかを単純にチェックし、このページが QueryString なしで呼び出された場合に他のアクションを実行できます。

于 2012-10-09T02:14:44.237 に答える
0

Dim URL As String = Request.QueryString("url").ToString()コードにブレークポイントをオンラインで配置しようとしましたか? 「url」パラメーターのクエリ文字列が存在する場合は、最初にそれを評価する必要があるかもしれません。文字列に変換する前に。

于 2012-10-09T02:33:45.283 に答える