Проблема получить данные из базы данных к 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 .... Где электронная почта=электронная почта", соед)
Спасибо Вам , мистер Синиса Хайнал, спасибо Вам, мистер Ричард Диминг, очень-очень большое :)
Ноорали,