Hallo,
ich habe folgenden Code
<asp:Content runat="server" ID="BodyContent" ContentPlaceHolderID="MainContent">
<hgroup class="title">
<h1>Lösungen<br />
</h1>
</hgroup>
<asp:FormView ID="FormView1" runat="server" AllowPaging="True" DataSourceID="SqlDataSource1" Height="400px" Width="870px" OnPageIndexChanging="FormView1_PageIndexChanging">
<EditItemTemplate>
</EditItemTemplate>
<ItemTemplate>
<table>
<tr>
<td>
<b>Frage</b>
</td>
<td colspan="3">
<asp:TextBox ID="Frage" runat="server" Text='<%# Bind("Frage") %>' Width="850px"></asp:TextBox>
</td>
</tr>
<tr>
<td>
<b>Stichworte</b>
</td>
<td>
<asp:TextBox ID="Stichworte" runat="server" Text='<%# Bind("Stichworte") %>' Width="625px"></asp:TextBox>
</td>
<td>
<b>Nutzer</b>
</td>
<td><asp:TextBox ID="Bearbeiter" runat="server" Text='<%# Bind("Bearbeiter") %>' Width="115px"></asp:TextBox></td>
</tr>
<tr>
<td>
<b>Antwort</b></td>
<td colspan="3">
<asp:TextBox ID="Antwort" runat="server" Text='<%# Bind("Antwort") %>' width="850px" Height="500px" Rows="100" TextMode="MultiLine"></asp:TextBox>
</td>
</tr>
<tr>
<td></td>
<td>
<asp:Button ID="BtnInsert" runat="server" Text="Insert" OnClick="BtnInsert_Click" />
<asp:Button ID="BtnUpdate" runat="server" Text="Save" OnClick="BtnUpdate_Click" />
<asp:Button ID="BtnDelete" runat="server" Text="Delete" OnClick="BtnDelete_Click" />
</td>
</tr>
</table>
</ItemTemplate>
</asp:FormView>
<asp:SqlDataSource ID="SqlDataSource1"
runat="server"
ConnectionString="<%$ ConnectionStrings:ConnectionString %>"
ProviderName="<%$ ConnectionStrings:ConnectionString.ProviderName %>"
SelectCommand="SELECT * FROM [Loesungen]"
EnableCaching="True"
UpdateCommand="UPDATE [LOESUNGEN] SET Frage=@VarFrage, Stichworte=@VarStichworte, Antwort=@VarAntwort, Bearbeiter=@VarBearbeiter, @Aktuell_Seit=Now() WHERE Id=@VarId"
InsertCommand="INSERT INTO [LOESUNGEN] (Frage, Stichworte, Antwort, Bearbeiter, Aktuell_Seit) VALUES (@Frage1, @Stichworte, @Antwort, @Bearbeiter, now())"
DeleteCommand="DELETE FROM [LOESUNGEN] WHERE Id=@VarId">
<UpdateParameters>
<asp:ControlParameter Name="VarFrage" ControlID="Frage" PropertyName="Text" />
<asp:ControlParameter Name="VarStichworte" ControlID="Stichworte" PropertyName="Text" />
<asp:ControlParameter Name="VarAntwort" ControlID="Antwort" PropertyName="Text" />
<asp:ControlParameter Name="VarBearbeiter" ControlID="Bearbeiter" PropertyName="Text" />
<asp:ControlParameter Name="VarId" ControlID="FormView1" PropertyName="SelectedValue" Type="Int16" />
</UpdateParameters>
</asp:SqlDataSource>
</asp:Content>
Wenn ich nun im BtnUpdate_Click ein SqlDataSource1.Update() mache, erhalte ich immer eine Fehlermeldung: Das Steuerelement Frage konnte in ControlParameter VarFrage nicht gefunden werden.
Ich wüsste im ersten Moment nicht, was an meinem Code falsch sein sollte.
Kann mir bitte jemand helfen?
Hallo icolor,
ControlID="FormView1$Frage"
mal probiert?
Allgemein: Asp.Webforms befreit dich nicht von "schönem" Design.
Daher: Trenne die Datenbank-Logik von der View!
Better Web Forms with the MVP Pattern
oder
Using MVP with ASP.NET Web Forms
oder nimm gleich MVC 😉
Gruss
Coffeebean
Microsoft MVP // Me // Blog // GitHub // @Egghead // All my talks // Speakerdeck
Super, jetzt liest er die richtig aus. Danke sehr.
Leider komme ich nun auf einen neuen Fehler:
Fehlermeldung:
System.Data.Odbc.OdbcException: ERROR [42000] [Microsoft][SQL Server Native Client 11.0][SQL Server]Die @VarFrage-Skalarvariable muss deklariert werden.
Ein kleines Problem bleibt nun noch übrig:
<asp:SqlDataSource ID="SqlDataSource1"
runat="server"
ConnectionString="<%$ ConnectionStrings:ConnectionString %>"
ProviderName="<%$ ConnectionStrings:ConnectionString.ProviderName %>"
SelectCommand="SELECT * FROM [Loesungen]"
EnableCaching="True"
UpdateCommand="UPDATE [LOESUNGEN] SET Frage=VarFrage, Stichworte=VarStichworte, Antwort=VarAntwort, Bearbeiter=VarBearbeiter WHERE Id=VarID"
InsertCommand="INSERT INTO [LOESUNGEN] (Frage, Stichworte, Antwort, Bearbeiter) VALUES (VarFrage, VarStichworte, VarAntwort, VarBearbeiter)"
DeleteCommand="DELETE FROM [LOESUNGEN] WHERE Id=VarId">
<UpdateParameters>
<asp:ControlParameter Name="VarFrage" ControlID="FormView1$Frage" PropertyName="Text" />
<asp:ControlParameter Name="VarStichworte" ControlID="FormView1$Stichworte" PropertyName="Text" />
<asp:ControlParameter Name="VarAntwort" ControlID="FormView1$Antwort" PropertyName="Text" />
<asp:ControlParameter Name="VarBearbeiter" ControlID="FormView1$Bearbeiter" PropertyName="Text" />
<asp:ControlParameter Name="VarID" ControlID="FormView1$Id" PropertyName="Text" />
</UpdateParameters>
<InsertParameters>
<asp:ControlParameter Name="VarFrage" ControlID="FormView1$Frage" PropertyName="Text" />
<asp:ControlParameter Name="VarStichworte" ControlID="FormView1$Stichworte" PropertyName="Text" />
<asp:ControlParameter Name="VarAntwort" ControlID="FormView1$Antwort" PropertyName="Text" />
<asp:ControlParameter Name="VarBearbeiter" ControlID="FormView1$Bearbeiter" PropertyName="Text" />
</InsertParameters>
<DeleteParameters>
<asp:ControlParameter Name="VarId" ControlID="FormView1" PropertyName="SelectedValue" Type="Int16" />
</DeleteParameters>
</asp:SqlDataSource>
Wenn ich nun ein Update ausführe bekomme ich noch die Meldung:
Fehlermeldung:
ERROR [42S22] [Microsoft][SQL Server Native Client 11.0][SQL Server]Ungültiger Spaltenname 'VarID'.
Daher: Trenne die Datenbank-Logik von der View!
oder
oder nimm gleich MVC 😉
Und dann:
[Artikelserie] SQL: Parameter von Befehlen
Du hast derzeit absolut keine Chance zu debuggen. Trenne die Verantwortlichkeiten! Das Zeug in der View zu halten ist zwar in manchen Beispielen vorhanden, aber schlichtweg einfach Müll.
Zu dem Fehler: Du willst dir aus "FormView1" die "Id" holen. Wo ist die denn oben in deinem Code?
Gruss
Coffeebean
Microsoft MVP // Me // Blog // GitHub // @Egghead // All my talks // Speakerdeck
Zu dem Fehler: Du willst dir aus "FormView1" die "Id" holen. Wo ist die denn oben in deinem Code?
Habe ich mittlerweile eingebaut. Und er leist sie auch korrekt aus. (VarID="5").
Ich verstehe nur ehrlich gesagt den Fehler nciht.
Hallo icolor,
deine ID sollte vom Typ Int sein. So wie dus beim Delete machst. Wenn der Query nicht funktioniert, feuer ihn mal direkt auf der DB.
Irgendwie muss man dir hier deinen Code erklären.
Beachte bitte auch:
[Hinweis] Wie poste ich richtig? 1.1
Gruss
Coffeebean
Microsoft MVP // Me // Blog // GitHub // @Egghead // All my talks // Speakerdeck