NoorAli87 Ответов: 0

Проблема получить данные из базы данных к GridView используя VB.NET


Привет дорогая

Моя проблема заключается в том, как получить данные пользователя, которые вы указали по его личной электронной почте .. где вы входите в систему пользователя на другой странице !

Когда он заходит на свою страницу в случае, если электронная почта верна, появляются его данные.

Но ошибка здесь в том, что он ничего не приносит мне из базы данных !

В чем же проблема?

Это код :

<asp:GridView ID="GridView" runat="server" DataKeyNames="Email" GridLines="None"  Style="width: 100%;text-align:center; direction: ltr;">
    
 <Columns>

         <asp:TemplateField HeaderText="Member Name" ItemStyle-Width="260"  >
            <ItemTemplate>
                <div style="float:left;    padding-left: 10px;">
            <asp:Label runat="server" ID="lblMemberImage"  Text='<%# Eval("MemberImage")%>' ></asp:Label>
            <asp:Label ID="lblEnglishName" runat="server" Text='<%# Eval("EnglishName")%>' style="margin-top: 15px; float:left;"></asp:Label>
            <asp:Label ID="lblArabicName" runat="server" Text='<%# Eval("ArabicName")%>' style="margin-top: 15px; float:left;"></asp:Label>
                </div>    
            </ItemTemplate>
             <ItemStyle Width="260px" />
        </asp:TemplateField>

         <asp:TemplateField HeaderText="Email" ItemStyle-Width="50">
            <ItemTemplate>
                <asp:Label ID="lblEmail" runat="server" Text='<%# Eval("Email")%>'></asp:Label>
            </ItemTemplate>
            <ItemStyle Width="50px" />
        </asp:TemplateField>

        <asp:TemplateField HeaderText="City-Country" ItemStyle-Width="150">
            <ItemTemplate>
                <asp:Label ID="lblCountry"  runat="server" Text='<%# Eval("CityCountry")%>'></asp:Label>
            </ItemTemplate>
            <ItemStyle Width="150px" />
        </asp:TemplateField>

        <asp:TemplateField HeaderText="Date of membership" ItemStyle-Width="180">
            <ItemTemplate>
                <asp:Label ID="lblDateofmembership"  runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "Date", "{0:MMM dd, yyyy}")%>'></asp:Label>
            </ItemTemplate>
            <ItemStyle Width="180px" />
        </asp:TemplateField>

        <asp:TemplateField HeaderText="Phone" ItemStyle-Width="150">
            <ItemTemplate>
                <asp:Label ID="lblPhone"  runat="server" Text='<%# Eval("Phone")%>'></asp:Label>
            </ItemTemplate>
            <ItemStyle Width="150px" />
        </asp:TemplateField>

        <asp:TemplateField HeaderText="Password" ItemStyle-Width="50">
            <ItemTemplate>
                <asp:Label ID="lblPassword" runat="server"  Text='<%# Eval("Password")%>'></asp:Label>
            </ItemTemplate>
            <ItemStyle Width="50px" />
        </asp:TemplateField>

         <asp:TemplateField HeaderText="A Level" ItemStyle-Width="50">
            <ItemTemplate>
                <asp:Label ID="lblA" runat="server"  Text='<%# Eval("AName")%>'></asp:Label>
            </ItemTemplate>
            <ItemStyle Width="50px" />
        </asp:TemplateField>

         <asp:TemplateField HeaderText="B Level" ItemStyle-Width="50">
            <ItemTemplate>
                <asp:Label ID="lblB" runat="server"  Text='<%# Eval("BName")%>'></asp:Label>
            </ItemTemplate>
            <ItemStyle Width="50px" />
        </asp:TemplateField>

         <asp:TemplateField HeaderText="SB Level" ItemStyle-Width="50">
            <ItemTemplate>
                <asp:Label ID="lblC" runat="server"  Text='<%# Eval("CName")%>'></asp:Label>
            </ItemTemplate>
            <ItemStyle Width="50px" />
        </asp:TemplateField>

    </Columns>

</asp:GridView>


Protected Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load

        If Not IsPostBack Then

            If Session("Email") = "" Then  
                Response.Redirect("Login-Member.aspx")

            Else

                Dim conn As New SqlConnection("Data Source=...")
                conn.Open()


                Dim da As New SqlDataAdapter("SELECT Member.Email FROM Member Where Email=@Email", conn)
                da.SelectCommand.Parameters.AddWithValue("@Email", Session("Email").ToString)

                Label1.Text = Session("Email")

                Dim obj As New DB_Member

                Dim dt As DataTable = obj.FindMembPage()

                GridView.DataSource = dt
                GridView.DataBind()

            End If

            conn.Close()
        End If

    End Sub



Public Function FindMembPage() As DataTable

        Getconnection()
        Dim sql As String = "SELECT  Member.MemberID,Member.EnglishName,Member.ArabicName,Member.MemberImage,Member.DateOfMembership,Member.Email,Member.Phone,Member.Password,Member.CityID ... ,(City.CityName +', '  +Country.CountryName) AS CityCountry FROM Member,City,Country,ALEVEL,BLEVEL,CLEVEL Where City.CityID=Member.CityID  AND Member.CountryID = Country.CountryID AND .... AND Email=@Email "

        Dim dt As New DataTable
        Dim da As New SqlDataAdapter(sql, Me.conn)

        If CountryID <> 0 Then
            da.SelectCommand.CommandText &= "AND City.CountryID = @CountryID"
            da.SelectCommand.Parameters.Add("@CountryID", SqlDbType.Int).Value = CountryID
        End If

        If CityID <> 0 Then
            da.SelectCommand.CommandText &= " AND Member.CityID =@CityID"
            da.SelectCommand.Parameters.Add("@CityID", SqlDbType.Int).Value = CityID
        End If

        If MemberID <> "" Then
            da.SelectCommand.CommandText &= "AND Member.MemberID Like @MemberID"
            da.SelectCommand.Parameters.Add("@MemberID", SqlDbType.NVarChar).Value = "%" & MemberID & "%"
        End If

        If EnglishName <> "" Then
            da.SelectCommand.CommandText &= " AND Member.EnglishName Like @EnglishName"
            da.SelectCommand.Parameters.Add("@EnglishName", SqlDbType.NVarChar).Value = "%" & EnglishName & "%"
        End If

        If ArabicName <> "" Then
            da.SelectCommand.CommandText &= " AND Member.ArabicName Like @ArabicName"
            da.SelectCommand.Parameters.Add("@ArabicName", SqlDbType.NVarChar).Value = "%" & ArabicName & "%"
        End If

        If Email <> "" Then
            da.SelectCommand.CommandText &= " AND Member.Email Like @Email"
            da.SelectCommand.Parameters.Add("@Email", SqlDbType.NVarChar).Value = Email

        End If

        If AID <> 0 Then
            da.SelectCommand.CommandText &= " AND Member.AID = @AID"
            da.SelectCommand.Parameters.Add("@AID", SqlDbType.Int).Value = AID
        End If

        If BID <> 0 Then
            da.SelectCommand.CommandText &= " AND Member.BID = @BID"
            da.SelectCommand.Parameters.Add("@BID", SqlDbType.Int).Value = BID
        End If

 If CID <> 0 Then
            da.SelectCommand.CommandText &= " AND Member.CID = @CID"
            da.SelectCommand.Parameters.Add("@CID", SqlDbType.Int).Value = CID
        End If

        Try
            Getconnection()
            da.Fill(dt)
        Catch ex As SqlException
            Me.Msg = "Error Message"
        Finally
            Try
                Me.conn.Close()
            Catch
            End Try
        End Try
        Return dt

    End Function


Что я уже пробовал:

<pre>     If Not IsPostBack Then

            If Session("Email") = "" Then 
                Response.Redirect("Login-Member.aspx")

            Else

                Dim conn As New SqlConnection("Data Source=...")
                conn.Open()


                Dim da As New SqlDataAdapter("SELECT Member.Email FROM Member Where Email=@Email", conn)
                da.SelectCommand.Parameters.AddWithValue("@Email", Session("Email").ToString)

                Label1.Text = Session("Email")

                Dim obj As New DB_Member


                Dim EnglishName As String = CType(GridView.SelectedValue.FindControl("lblEnglishName"), Label).Text

                Dim MemberImage As String = CType(GridView.SelectedValue.FindControl("lblMemberImage"), Label).Text
                Dim ArabicName As String = CType(GridView.SelectedValue.FindControl("lblArabicName"), Label).Text
                Dim Email As String = CType(GridView.SelectedValue.FindControl("lblEmail"), Label).Text
                Dim CityCountry As String = CType(GridView.SelectedValue.FindControl("lblCountry"), Label).Text
                Dim Dateofmembership As String = CType(GridView.SelectedValue.FindControl("lblDateofmembership"), Label).Text
                Dim Phone As String = CType(GridView.SelectedValue.FindControl("lblPhone"), Label).Text
                Dim Password As String = CType(GridView.SelectedValue.FindControl("lblPassword"), Label).Text
                Dim PCTName As String = CType(GridView.SelectedValue.FindControl("lblA"), Label).Text
                Dim ISIDName As String = CType(GridView.SelectedValue.FindControl("lblB"), Label).Text
                Dim SBName As String = CType(GridView.SelectedValue.FindControl("lblC"), Label).Text

                'Dim dr As SqlDataReader

                Dim dt As DataTable = obj.FindMembPage()

                GridView.DataSource = dt
                GridView.DataBind()

            End If

            conn.Close()
        End If

Sinisa Hajnal

Вы используете объект datatable без вызова метода dataaddapters fill da.Fill(dt). Вместо этого вы создаете новый DB_Member (который по умолчанию пуст, если вы не заполняете его в конструкторе из вашего объекта сеанса).

NoorAli87

Предыдущий код корректно работает со мной и вызывает данные из таблицы.
Ошибка была со мной в этой части звонка: AND Email = @ Email
Когда я исправил свою ошибку, код хорошо работал со мной, но проблема заключалась в том, что после ввода электронной почты у меня были все данные участников !!
Я просто хочу получить данные участника, которые я просто ввожу по электронной почте в форме входа в систему !

Richard Deeming

... FROM Member,City,Country,ALEVEL,BLEVEL,CLEVEL Where City.CityID=Member.CityID AND ...

Не делай этого таким образом. Вы смешиваете условия соединения с условиями фильтрации и усложняете себе жизнь. Используйте правильный JOIN пункт вместо этого:

...
FROM Member
INNER JOIN City ON City.CityID = Member.CityID
INNER JOIN Country ON Country.CountryID = Member.CountryID
INNER JOIN ALEVEL ON ...
INNER JOIN BLEVEL ON ...
INNER JOIN CLEVEL ON ...
WHERE Member.Email = @Email

NoorAli87

Ошибка решена , моя ошибка в этом предложении :

Dim da As New SqlDataAdapter("выберите участника.Электронная почта от участника Where Email=@Email", conn)

Это правильное предложение :
Dim da As New SqlDataAdapter ("выберите участника.MemberID,Член Клуба.Английское Имя,Член Клуба.Арабское Имя,Член Клуба.Образ Члена,Член Клуба.Дата Членства,Член Клуба.Электронная Почта,Член Клуба.Телефон,Член Клуба.Пароль,Член Клуба.CityID ... ,(Город.Название Города +', ' +Страна.CountryName) как CityCountry от члена,города,страны,ALEVEL,BLEVEL,CLEVEL, где город.CityID=Участник.CityID и член клуба.CountryID = Страна.И CountryID .... Где электронная почта=электронная почта", соед)

Спасибо Вам , мистер Синиса Хайнал, спасибо Вам, мистер Ричард Диминг, очень-очень большое :)
Ноорали,

0 Ответов