Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

@Skalarvariable nicht deklariert

Empfohlene Antworten

Veröffentlicht

Hallo, ich habe mal wieder ein Problem.

Und zwar lasse ich mir ne Tabelle in meinen GridView anzeigen. Alles schick. Die ID zeige ich nicht an habe sie aber mit im Select drinne und im GV als DataKeyNames deklariert.

Die delete-Anweisung funktioniert super, das update hingegen nicht.

"Die "@id"-Skalarvariable muss deklariert werden." ist die Fehlermeldung. Hat jemand ne Idee warum es beim delete klappt und beim update nicht? hier mein code:

<asp:TemplateField ShowHeader="False">

           <ItemTemplate>

                    <asp:ImageButton ID="Button_Delete" runat="server" CausesValidation="false" ImageUrl="~/Images/delete.jpg" CommandName="Delete"

                        Text="Löschen" />

                </ItemTemplate>

                <EditItemTemplate>

                    <asp:ImageButton ID="Button_Update" runat="server" CausesValidation="false" ImageUrl="~/Images/accept.gif" CommandName="Update"

                        Text="Update"/>

                </EditItemTemplate>                

            </asp:TemplateField>




            <asp:TemplateField ShowHeader="False">

                <ItemTemplate>

                    <asp:ImageButton ID="Button_Edit" runat="server" CausesValidation="false" ImageUrl="~/Images/edit.gif" CommandName="Edit"

                        Text="Bearbeiten" AutoPostBack="True" />

                </ItemTemplate>

                <EditItemTemplate>

                    <asp:ImageButton ID="Button_Cancel" runat="server" CausesValidation="false" ImageUrl="~/Images/cancel.gif" CommandName="Cancel"

                        Text="Cancel" />

                </EditItemTemplate>                

            </asp:TemplateField>


 DeleteCommand="DELETE FROM tb_Glossar WHERE (ID = @id)" 

 UpdateCommand="UPDATE tb_Glossar SET [Bezeichnung ] = @Bezeichnung,

 [Definition / Beschreibung] = @Beschreibung, Status = @Status, Thema = @Thema WHERE (ID =@id)">


        <DeleteParameters>

            <asp:Parameter Name="id" />

        </DeleteParameters>


        <UpdateParameters>

            <asp:Parameter Name="Bezeichnung" />

            <asp:Parameter Name="Beschreibung" />

            <asp:Parameter Name="Status" />

            <asp:Parameter Name="Thema" />

            <asp:Parameter Name="id" />

        </UpdateParameters>


hat jemand ne idee? danke

mh nein, daran liegt es leider nicht

also ich habe jetzt einfach die ID mit ins Gridview aufgenommen und lasse sie im moment auch anzeigen. wie gesagt, löschen funzt. beim Update kommt jetzt aber eine andere Fehlermeldung

"Falsche Syntax in der Nähe von 'nvarchar'."

in der Tabelle ist die id ein int, und die anderen spalten sind nvarchar (bezeichnung), ntext (beschreibung), nvarchar (status) und nochmal nvarchar (thema).

Am Code habe ich nichts weiter geändert. Jemand ne idee?

Versuch doch mal das:

        

        <UpdateParameters>

            <asp:Parameter Name="Bezeichnung" Type="String"/>

            <asp:Parameter Name="Beschreibung" Type="String"/>

            <asp:Parameter Name="Status" Type="String"/>

            <asp:Parameter Name="Thema" Type="String"/>

            <asp:Parameter Name="id" Type="Int32"/>

        </UpdateParameters>

hat jemand ne idee? danke

also bei " SET [bezeichnung ] = @Bezeichnung" ist kein leerzeichen zuviel. dummerweise heißt die spalte der tabelle tatsächlich [bezeichnung ] (ohne die Eckigen Klammern, aber mit Leerzeichen. und leider kann ich das nicht ändern, aber das sollte auch eigentlich nicht das Problem sein.)

Das mit dem Type=String angeben hat leider auch nicht geholfen.

Mein Insert funktioniert ja komischerweise auch.

InsertCommand="INSERT INTO tb_Glossar([Bezeichnung ], [Definition / Beschreibung], Status, Thema) VALUES (@Bezeichnung, @Beschreibung, @Status, @Thema)" 


<InsertParameters>

            <asp:Parameter Name="Bezeichnung" />

            <asp:Parameter Name="Beschreibung" />

            <asp:Parameter Name="Status" />

            <asp:Parameter Name="Thema" />

        </InsertParameters>        

Das sieht eher so aus, als ob in der SQL-Anweisung direkt ein String "nvarchar" übermittelt würde. Poste doch mal den Code, wo du das Gridview mit den Parametern verbindest.

(PS: Du hast ne priv. Nachricht ;-) )

EDIT:

Versuch doch mal, bei WHERE id=... eine ID per Hand einzutragen also

WHERE ID = 5 oder so

Bearbeitet von steinadler

hallöle:

Also vorab ich mache relativ wenig in ASP.

Jedoch sollten die SQL Klassen in der hinsicht die selben sein.

Kleiner Hinweis wenn du mit Parametern arbeitest:


UpdateCommand="UPDATE tb_Glossar SET [Bezeichnung ] = @Bezeichnung,

 [Definition / Beschreibung] = @Beschreibung, Status = @Status, Thema = @Thema WHERE (ID =@id)">


        <DeleteParameters>

            <asp:Parameter Name="id" />

        </DeleteParameters>


        <UpdateParameters>

            <asp:Parameter Name="@Bezeichnung" />

            <asp:Parameter Name="@Beschreibung" />

            <asp:Parameter Name="@Status" />

            <asp:Parameter Name="@Thema" />

            <asp:Parameter Name="@id" />

        </UpdateParameters>

Wenn du SQL Parameter definierst must du bei dem Namen ebenfalls das @ Char hinzufügen. Eben den ganzen "Platzhalter" im Statement. Desweiteren fiehl mir auf das du keinem einzigen Parameter einem Value gegeben hast. Wird dann halt standartmäßig Nothing sein. lg Gateway PS: So bin ich das gewöhnt (ist eben nicht ASP, jedoch sollte man daraus etwas abmünzen können):

    Dim con As New SqlClient.SqlConnection("ConnectionString")

            Dim cmd As New SqlClient.SqlCommand

            cmd.Connection = con

            cmd.CommandText = "INSERT INTO Personen(Name) VALUES(@var1)"

            Dim para1 As New SqlClient.SqlParameter("@var1", SqlDbType.NVarChar)

            para1.Value = "Gateway"

            cmd.AddSqlParameter(para1)

            con.Open()

            cmd.ExecuteNonQuery()

            con.Close()

Bearbeitet von Gateway_man

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.