Asp. net SQL исключение - PullRequest
       5

Asp. net SQL исключение

0 голосов
/ 22 апреля 2020

Я делаю веб-приложение ASP. net и пытаюсь заполнить таблицу информацией из базы данных. Однако я получаю сообщение об ошибке:

Сведения об исключении: System.Data.SqlClient.SqlException: неверный синтаксис рядом с ключевым словом «FROM».

Неправильный синтаксис рядом с ключевым словом «AS».

Вот код

conn.Open();

// Make for new table with covalent

SqlCommand command = new SqlCommand("SELECT [compound_name], cc.[nonmetal1_quantity] AS [nonMetal1_quantity], (SELECT" + 
                                    "ion.formula FROM NonMetal AS ion WHERE ion.[nonmetal_id] = cc.[nonmetal1_id]) AS[nonMetal1]," +
                                    "cc.[nonmetal2_quantity] as [nonMetal2_quantity], (SELECT ion.formula FROM NonMetal AS ion WHERE ion.[nonmetal_id] = cc.[nonmetal2_id]) AS[nonMetal2]," + 
                                    "c.compound_id AS [compound_id] FROM Compound as c, Covalent AS cc, NonMetal AS n WHERE c.[compound_id] = cc.[compound_id] ORDER BY c.[compound_name] ASC", conn);

DataTable table = new DataTable();
SqlDataAdapter adapter = new SqlDataAdapter(command);
adapter.Fill(table); //Line where the error is thrown

CompoundTable.DataSource = table;
CompoundTable.DataBind();

и соответствующий вид сетки.

<asp:GridView ID="CompoundTable" runat="server" AllowSorting="True" AllowPaging="True" AutoGenerateColumns="False" PageSize="20" OnSorting="CompoundTable_Sorting" OnPageIndexChanging="CompoundTable_PageIndexChanging" OnRowCancelingEdit="CompoundTable_CancelEdit" OnRowEditing="CompoundTable_Edit" OnRowUpdating="CompoundTable_Update" onrowdatabound="CompoundTable_DataBound" CellPadding="4">
                <Columns>
                    <asp:TemplateField Visible="false" HeaderText="ID"> 
                    <ItemTemplate>
                        <asp:Label ID="compound_id" runat="server" Text='<%#Eval("compound_id") %>'/>
                    </ItemTemplate>
                        </asp:TemplateField>
                    <asp:TemplateField HeaderText="Compound"> 
                    <ItemTemplate>
                        <asp:Label ID="compound_name" runat="server" Text='<%#Eval("compound_name") %>'>
                        </asp:Label>
                    </ItemTemplate>
                        <EditItemTemplate>
                            <asp:TextBox ID ="name_txt" runat="server" Text='<%#Eval("compound_name") %>'>
                                </asp:TextBox>
                        </EditItemTemplate>
                        </asp:TemplateField>
                    <asp:TemplateField HeaderText="Non-Metal 1"> 
                    <ItemTemplate>
                        <asp:Label ID="nonMetal1" runat="server" Text='<%#Eval("nonMetal1") %>'/>
                    </ItemTemplate>
                        <EditItemTemplate>
                            <asp:DropDownList ID ="nonMetal1_txt" runat="server" >
                                </asp:DropDownList>
                        </EditItemTemplate>
                            </asp:TemplateField>
                        <asp:TemplateField HeaderText="Quantity"> 
                    <ItemTemplate>
                        <asp:Label ID="nonMetal1_quantity" runat="server" Text='<%#Eval("nonMetal1_quantity") %>'/>
                    </ItemTemplate>
                            <EditItemTemplate>
                            <asp:TextBox ID ="nonMetal1_quantity_txt" runat="server" Text='<%#Eval("nonMetal1_quantity") %>'>
                                </asp:TextBox>
                        </EditItemTemplate>
                            </asp:TemplateField>
                        <asp:TemplateField HeaderText="Non-Metal 2"> 
                    <ItemTemplate>
                        <asp:Label ID="nonMetal2" runat="server" Text='<%#Eval("nonMetal2") %>'/>
                    </ItemTemplate>
                            <EditItemTemplate>
                            <asp:DropDownList ID ="nonMetal2_txt" runat="server" >
                                </asp:DropDownList>
                        </EditItemTemplate>
                            </asp:TemplateField>
                        <asp:TemplateField HeaderText="Quantity"> 
                    <ItemTemplate>
                        <asp:Label ID="nonMetal2_quantity" runat="server" Text='<%#Eval("nonMetal2_quantity") %>'/>
                    </ItemTemplate>
                            <EditItemTemplate>
                            <asp:TextBox ID ="nonMetal2_quantity_txt" runat="server" Text='<%#Eval("nonMetal2_quantity") %>'>
                                </asp:TextBox>
                        </EditItemTemplate>
                            </asp:TemplateField>
                    <asp:HyperLinkField DataNavigateUrlFields="compound_id" DataNavigateUrlFormatString="DeleteCompound.aspx?compound={0}" Text="Delete Compound" />
                     <asp:TemplateField>
            <ItemTemplate>
                <asp:LinkButton ID="LBEdit" runat="server"  CommandName="Edit" >Edit</asp:LinkButton>
            </ItemTemplate>
            <EditItemTemplate>
                <asp:LinkButton ID="LBCancel" runat="server" CommandName="Cancel">Cancel</asp:LinkButton>
                <asp:LinkButton ID="LBUpdate" runat="server" CommandName="Update">Update</asp:LinkButton>
            </EditItemTemplate>
        </asp:TemplateField>
                </Columns>
            </asp:GridView>

Спасибо.

1 Ответ

1 голос
/ 22 апреля 2020

Проверьте вашу конкатенацию строк

.. SELECT "+
" ion.formula

приведет к

SELECTion .formula

не

ВЫБРАТЬ ion.formula

Но помимо непосредственной проблемы, две рекомендации.

  1. При попытке отследить проблему, подобную этой, введите точку останова отладки и скопируйте значение из command.CommandText, вставьте его в SSMS и попробуйте выполнить его. Это поможет вам понять, в чем заключается ваша проблема.
  2. Используйте префикс @ string для выполнения многострочных SQL запросов. Как в

    команда SqlCommand = новая команда SqlCommand (@ "SELECT [составное_имя], cc. [Nonmetal1_quantity] AS [nonMetal1_quantity], (ВЫБРАТЬ ion.formula ОТ НЕМЕТАЛЬНОГО AS-иона WHERE-иона. [Nonmetal_id] = cc. [Nonmetal1_id]) AS [nonMetal1], cc. [Nonmetal2_quantity] as [nonMetal2_quantity], (ВЫБРАТЬ ion.formula ОТ НЕМЕТАЛЬНОГО AS-иона WHERE-ион. [Nonmetal_id] = cc. [Nonmetal2_id]) AS [ nonMetal2], c .compound_id AS [component_id] FROM Соединение как c, ковалентный AS cc, неметаллический AS n ГДЕ c. [component_id] = cc. [component_id] ORDER BY c. [составное_имя] AS C ", conn);

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...