Zum Inhalt springen

@Skalarvariable nicht deklariert


Empfohlene Beiträge

Geschrieben

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

Geschrieben

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?

Geschrieben

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

Geschrieben

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>        

Geschrieben (bearbeitet)

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
Geschrieben (bearbeitet)

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

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...