Laden...

[Asp.Net WebForms] Update Problem bei SQLDataSource

Erstellt von icolor vor 10 Jahren Letzter Beitrag vor 10 Jahren 3.224 Views
I
icolor Themenstarter:in
115 Beiträge seit 2008
vor 10 Jahren
[Asp.Net WebForms] Update Problem bei SQLDataSource

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?

2.207 Beiträge seit 2011
vor 10 Jahren

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

I
icolor Themenstarter:in
115 Beiträge seit 2008
vor 10 Jahren

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.

I
icolor Themenstarter:in
115 Beiträge seit 2008
vor 10 Jahren

mmh, hat sicher erledigt, einfach die "@" weglassen

I
icolor Themenstarter:in
115 Beiträge seit 2008
vor 10 Jahren

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'.

2.207 Beiträge seit 2011
vor 10 Jahren

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

I
icolor Themenstarter:in
115 Beiträge seit 2008
vor 10 Jahren

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.

2.207 Beiträge seit 2011
vor 10 Jahren

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