Question

I am having trouble trying to get this form to save the username to the record (keeps just displaying null - everything else is working and being recorded. I have followed many tutorials online and I think I am doing everything right.

I would appreciate anyone's input.

Purchase.aspx.vb

Imports System.Collections.Generic
Imports System.Data.Common
Imports System.Linq

Partial Public Class ManageFavoritesWithUserProperty
    Inherits System.Web.UI.Page
    Protected Sub SqlDataSource1_Selecting(sender As Object, e As  System.Web.UI.WebControls.SqlDataSourceSelectingEventArgs)
    AssignUserName(e.Command.Parameters)
End Sub

Protected Sub SqlDataSource1_Inserting(sender As Object, e As System.Web.UI.WebControls.SqlDataSourceCommandEventArgs)
    AssignUserName(e.Command.Parameters)
End Sub

Protected Sub SqlDataSource1_Updating(sender As Object, e As System.Web.UI.WebControls.SqlDataSourceCommandEventArgs)
    AssignUserName(e.Command.Parameters)
End Sub

Protected Sub SqlDataSource1_Deleting(sender As Object, e As System.Web.UI.WebControls.SqlDataSourceCommandEventArgs)
    AssignUserName(e.Command.Parameters)
End Sub

Private Sub AssignUserName(parameters As DbParameterCollection)
    parameters("@UserName").Value = User.Identity.Name
End Sub
End Class

Partial Class Members_Default
    Inherits System.Web.UI.Page
End Class

Purchase.aspx

<%@ Page Language="VB" AutoEventWireup="false" CodeFile="purchase.aspx.vb" Inherits="Members_Default" %>

<!-- see link below for tutorial -->
<!-- http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.sqldatasource.insertcommand(v=vs.110).aspx?cs-save-lang=1&cs-lang=vb#code-snippet-3 -->

<!DOCTYPE html>

<script runat="server">
    Private Sub InsertOrder(ByVal Source As Object, ByVal e As EventArgs)
        SqlDataSource1.Insert()
    End Sub
  </script>


<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">




        <br />

        <asp:Label ID="Label2" runat="server" Text="Label">
            Location and time:
        </asp:Label>   

        <asp:dropdownlist
            id="DropDownList1"
            runat="server"
            datasourceid="SqlDataSource1"
            datavaluefield="bookinginfo" />

        <br />

        <asp:Label ID="Label1" runat="server" Text="Label">
            Quantity:
        </asp:Label>
    <asp:TextBox 
            ID="TextBox1" 
            runat="server"
            datasourceid="SqlDataSource1"
            datavaluefield="quantity">
        </asp:TextBox>
    <asp:sqldatasource
        id="SqlDataSource1"
        runat="server"
        connectionstring="Data Source=(LocalDb)\v11.0;AttachDbFilename=\\psf\Home\Desktop\movieticketwebsite\App_Data\aspnet-movieticketwebsite-20140126010617.mdf;Initial Catalog=aspnet-movieticketwebsite-20140126010617;Integrated Security=True"
        selectcommand="SELECT  (sessions.session+' '+ locations.town) AS bookinginfo from sessions join locations on locations.id=sessions.locationid where sessions.movieid=@movie "
        insertcommand="INSERT INTO bookings (quantity, bookinginfo, movieid, username) VALUES (@quantity,@bookinginfo, @movie, @username)">
          <insertparameters>
            <asp:formparameter name="quantity" formfield="TextBox1" />
            <asp:formparameter name="bookinginfo" formfield="DropDownList1" />
            <asp:QueryStringParameter Name="movie" QueryStringField="movie" />
            <asp:Parameter Name="UserName" Type="String" />

         </insertparameters>
         <SelectParameters>
                <asp:QueryStringParameter
                    name="movie"
                    querystringfield="movie" />
            </SelectParameters>
      </asp:sqldatasource>
<br />
    <asp:button
           id="Button1"
           runat="server"
           text="Purchase Tickets"
           onclick="InsertOrder" />
     </form>
</body>
</html>
Was it helpful?

Solution 2

Found this worked:

<script runat="server">
    Private Sub InsertOrder(ByVal Source As Object, ByVal e As EventArgs)
        Dim myuser As MembershipUser
        myuser = Membership.GetUser(User.Identity.Name)
        Dim myuserString As String
        myuserString = myuser.UserName
        SqlDataSource1.InsertParameters.Add("username", myuserString)
        SqlDataSource1.InsertCommand = "insert into bookings (quantity, bookinginfo, movieid, username) VALUES (@quantity,@bookinginfo, @movie, @username)"
        SqlDataSource1.Insert()
    End Sub
</script>

OTHER TIPS

To set parameter value, use DefaultValue.

EDIT : I have noticed you are using e.Command.Parameters which wouldn't help much. Try the following:

Purchase.aspx.vb

Imports System.Collections.Generic
Imports System.Data.Common
Imports System.Linq

Partial Public Class ManageFavoritesWithUserProperty
    Inherits System.Web.UI.Page
    Protected Sub SqlDataSource1_Selecting(sender As Object, e As System.Web.UI.WebControls.SqlDataSourceSelectingEventArgs)
        Dim param = SqlDataSource1.SelectParameters
        AssignUserName(param)
    End Sub

    Protected Sub SqlDataSource1_Inserting(sender As Object, e As System.Web.UI.WebControls.SqlDataSourceCommandEventArgs)
        Dim param = SqlDataSource1.InsertParameters
        AssignUserName(param)
    End Sub

    Protected Sub SqlDataSource1_Updating(sender As Object, e As System.Web.UI.WebControls.SqlDataSourceCommandEventArgs)
        Dim param = SqlDataSource1.UpdateParameters
        AssignUserName(param)
    End Sub

    Protected Sub SqlDataSource1_Deleting(sender As Object, e As System.Web.UI.WebControls.SqlDataSourceCommandEventArgs)
        Dim param = SqlDataSource1.DeleteParameters
        AssignUserName(param)
    End Sub

    Private Sub AssignUserName(parameters As ParameterCollection)
        parameters("@UserName").DefaultValue = User.Identity.Name
    End Sub


End Class

Partial Class Members_Default
    Inherits System.Web.UI.Page
End Class
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top