Jana_ Geschrieben 16. Juni 2010 Geschrieben 16. Juni 2010 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 Zitieren
steinadler Geschrieben 16. Juni 2010 Geschrieben 16. Juni 2010 Vielleicht kommt er nicht damit klar, dass zwischen = und @ kein Leerzeichen ist? Wäre zwar komisch, aber das ist z.B. ein Unterschied zwischen beiden Aufrufen. Zitieren
Jana_ Geschrieben 16. Juni 2010 Autor Geschrieben 16. Juni 2010 mh nein, daran liegt es leider nicht Zitieren
Jana_ Geschrieben 16. Juni 2010 Autor Geschrieben 16. Juni 2010 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? Zitieren
steinadler Geschrieben 16. Juni 2010 Geschrieben 16. Juni 2010 SET [bezeichnung ] = @Bezeichnung da ist nach Bezeichnung vorne ein Leerzeichen zuviel. Ich weiß ja nicht, wie pingelig ASP da ist. Zitieren
steinadler Geschrieben 16. Juni 2010 Geschrieben 16. Juni 2010 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 Zitieren
Jana_ Geschrieben 16. Juni 2010 Autor Geschrieben 16. Juni 2010 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> Zitieren
steinadler Geschrieben 16. Juni 2010 Geschrieben 16. Juni 2010 (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 16. Juni 2010 von steinadler Zitieren
Gateway_man Geschrieben 16. Juni 2010 Geschrieben 16. Juni 2010 (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 16. Juni 2010 von Gateway_man Zitieren
Empfohlene Beiträge
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.