Пользовательский оператор SQL Select, не отображающий данные в GridView

SELECT 
    LeagueTable.P,
    LeagueTable.W,
    LeagueTable.D,
    LeagueTable.L,
    LeagueTable.GF,
    LeagueTable.GA,
    LeagueTable.GD,
    LeagueTable.Pts,
    Team.Team_name,
    LeagueTable.Team_ID
FROM LeagueTable
INNER JOIN Team 
    ON LeagueTable.Team_ID = Team.Team_ID

введите здесь описание изображения

У меня есть пользователь, который вводит название команды при запуске, которое вводится в таблицу Team, которая перенаправляет на веб-страницу с таблицей лиг. Таблица лиг изначально не содержит данных, но она должна отображать строку с пользовательским вводом, как только пользователь перейдет на эту страницу.

Однако этот запрос показывает GridView как пустой. Что с этим не так?

asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataSourceID="SqlDataSource1" EmptyDataText="No teams entered into the table.">
        <Columns>
            <asp:BoundField DataField="P" HeaderText="P" SortExpression="P" />
            <asp:BoundField DataField="W" HeaderText="W" SortExpression="W" />
            <asp:BoundField DataField="D" HeaderText="D" SortExpression="D" />
            <asp:BoundField DataField="L" HeaderText="L" SortExpression="L" />
            <asp:BoundField DataField="GF" HeaderText="GF" SortExpression="GF" />
            <asp:BoundField DataField="GA" HeaderText="GA" SortExpression="GA" />
            <asp:BoundField DataField="GD" HeaderText="GD" SortExpression="GD" />
            <asp:BoundField DataField="Pts" HeaderText="Pts" SortExpression="Pts" />
            <asp:BoundField DataField="Team_name" HeaderText="Team_name" SortExpression="Team_name" />
            <asp:BoundField DataField="Team_ID" HeaderText="Team_ID" SortExpression="Team_ID" />
        </Columns>
    </asp:GridView>

            protected void NewTeamBtn_Click(object sender, EventArgs e)
{           
    string qry1 = "INSERT into Team (Team_name) VALUES (@Team_name)";
    using (SqlCommand cmd = new SqlCommand(qry1, con))
    {
        cmd.Parameters.Add(("@Team_name"), SqlDbType.VarChar).Value = NewTeamTxtBox.Text;
        cmd.CommandType = CommandType.Text;
        con.Open();
        cmd.ExecuteNonQuery();
        con.Close();
    }
    Response.Redirect("EnterData.aspx");
}
    <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:SportsData2ConnectionString %>" SelectCommand="SELECT LeagueTable.League_ID, LeagueTable.Team_ID, LeagueTable.P, LeagueTable.W, LeagueTable.D, LeagueTable.L, LeagueTable.GF, LeagueTable.GA, LeagueTable.GD, LeagueTable.Pts, Team.Team_name FROM LeagueTable INNER JOIN Team ON LeagueTable.Team_ID = Team.Team_ID"></asp:SqlDataSource>

person A. McLean    schedule 03.05.2016    source источник
comment
Как вы вызываете запрос? И как вы помещаете результат в gridview?   -  person Felix Pamittan    schedule 04.05.2016
comment
Можете ли вы показать нам код привязки данных?   -  person Ismael    schedule 04.05.2016
comment
Я установил пользовательский запрос выбора SQL внутри источника данных SQL. Я прикрепил свой GridView к исходному вопросу.   -  person A. McLean    schedule 04.05.2016
comment
Из того, что вы говорите, пользователь вводит название команды, которое затем добавляется в таблицу команд, а затем перенаправляется на страницу лиги. Если вы заметили, что у вас есть Inner Join на вашем select. Если команда новая, то мне трудно поверить, что в турнирной таблице уже есть какие-то строчки. Просто из-за грамматики я смущен тем, что у 1 команды много лиг. В любом случае, вы пытались запустить свой SQL напрямую в базу данных, чтобы подтвердить, что у вас должны быть какие-либо данные?   -  person Adam Heeg    schedule 04.05.2016
comment
Пользователь должен сам создать рейтинговую таблицу всех команд. Я не хочу, чтобы у одной команды было много лиг, я не уверен в своих связях с базой данных. Да и он ничего не вернул, даже когда у меня есть список команд в таблице Team   -  person A. McLean    schedule 04.05.2016
comment
Я действительно спрашиваю, когда я делаю запись для таблицы Team, как мне сделать так, чтобы запись делалась в LeagueTable с тем же Team_ID?   -  person A. McLean    schedule 04.05.2016
comment
Этот вопрос не имеет отношения к тому, что вы написали. тогда вам следует очистить свой вопрос или задать новый.   -  person Adam Heeg    schedule 04.05.2016
comment
Знаете ли вы, почему данные этого запроса на выборку не заполняются? Все, что я пытаюсь, ничего не возвращает   -  person A. McLean    schedule 04.05.2016
comment
Я до сих пор не уверен, является ли это проблемой данных или проблемой реализации. Можете ли вы подтвердить, что запрос к вашему источнику данных sql действительно возвращает строки? Если это так, то вы, вероятно, не вызываете DataBind или что-то еще в своем коде. вы должны опубликовать этот код.   -  person Adam Heeg    schedule 04.05.2016
comment
Этот оператор select не возвращает никаких строк, потому что внутри LeagueTable нет строк, созданных так, как я этого хочу. Я прикрепил выше метод вставки, который я использую.   -  person A. McLean    schedule 04.05.2016
comment
Ваш оператор вставки не добавляет строку в LeagueTable, а только в Team. Вы должны написать еще одну вставку, чтобы добавить ее в LeagueTable...   -  person Adam Heeg    schedule 04.05.2016
comment
Я пробовал это решение, но мои методы вставки не работали. Я хочу использовать один и тот же Team_ID между таблицами, как мне это сделать?   -  person A. McLean    schedule 04.05.2016


Ответы (1)


Судя по вашим комментариям, вы можете вставлять данные в свою таблицу Team, но когда вы запускаете оператор select, который есть в вашем источнике данных SQL, вы заметите, что у вас есть Inner Join. Это Inner Join означает, что если идентификатор команды не находится ни в одной из двух таблиц, к которым вы присоединяетесь, то результаты не будут возвращены.

Я не вижу ваш исходный код данных sql, но еще одна возможная точка отказа — TeamID, который вы передаете в этот элемент управления. Есть 3 вопроса, которые приходят мне на ум, чтобы убедиться, что вы получаете достоверные данные.

1) Откуда вы это берете?

2) Он действителен и в обеих таблицах?

3) Вы повторно связываете сетку после установки этого значения?

Изменить

То, что вы хотите сделать, совершенно не соответствует вашему вопросу на данный момент. Вы должны отредактировать заголовок и вопрос.

Я бы использовал что-то подобное для вашей вставки.

DECLARE @TeamID as INT
INSERT into Team (Team_name) VALUES (@Team_name)

SELECT @TeamID = SCOPE_IDENTITY();

INSERT into LeagueTable Team_ID VALUES @TeamID

этот пост поможет Scope_Identity vs @@Identity

этот вопрос о стеке тоже поможет.

person Adam Heeg    schedule 04.05.2016
comment
Я добавил для вас источник данных SQL. Team_ID есть в обеих таблицах, и я не могу применить GridView1.DataBind();, так как эта кнопка ведет на другую страницу. - person A. McLean; 04.05.2016
comment
Оно работает! Необходимо изменить синтаксис последней строки на INSERT into (LeagueTable) Team_ID VALUES (@TeamID), а затем изменить League_ID на IsIdentity = on. Однако теперь я получаю каждую строку с другим League_ID. Имеет ли это значение для последующих запросов, использующих эту таблицу? Я не хочу, чтобы команды были разделены по разным лигам, я просто использую это как первичный ключ. - person A. McLean; 04.05.2016
comment
У вас есть отношение 1 ко многим между таблицами, однако ваш комментарий звучит так, будто нет причин разделять 2 таблицы. Почему у вас есть отдельная таблица только для названия команды? Вы можете объединить их в одну таблицу. - person Adam Heeg; 04.05.2016
comment
В другом вопросе было предложено, чтобы моя структура базы данных имела этот макет. У меня есть другие таблицы, которые полагаются на сбор Team_name, например, таблица Match Statistics, которая собирает Home_Team_ID и Away_Team_ID, которая получает имена команд из этого списка. - person A. McLean; 04.05.2016