Laden...

updatecommand bei SqlDataSource

Erstellt von Kiki7 vor 17 Jahren Letzter Beitrag vor 17 Jahren 4.405 Views
K
Kiki7 Themenstarter:in
45 Beiträge seit 2006
vor 17 Jahren
updatecommand bei SqlDataSource

hi zusammen,

hoffe ihr könnt mir helfen, ich werde gerade mittelmäßig wahnsinnig. Erstelle gerade meine erste Testapplikation mit GridView und erhalte immer nach Betätigen des "Update-Links" einen Fehler "ORA-01036: Variablenname/-nummer ungültig". Ich kann machen, was ich will. Habe meine Tabelle schon auf nur eine sichtbare Spalte reduziert, aber nichts hilft...WAS MACHE ICH FALSCH? X(


<asp:GridView 
          ID="SimpleGridView" 
          runat="server"  
          DataKeyNames="STRASSE_SEQ"
          AllowSorting="true" 
          DataSourceID="SimpleDatasource"  
          ShowHeader="true" 
          AlternatingRowStyle-CssClass="AltCenter" 
          RowStyle-CssClass="MainCenter" 
          AllowPaging="true" 
          PageSize="20" 
          AutoGenerateColumns="false" 
          CssClass="MyGrid" 
          HeaderStyle-Font-Bold="true" DataMember="DefaultView"        
          >
            <Columns>
                <asp:CommandField ShowEditButton="True" />
                <asp:BoundField DataField="STRASSE_SEQ" HeaderText="Seq" SortExpression="STRASSE_SEQ" Visible="False" />
                <asp:BoundField DataField="CODE" HeaderText="Code" SortExpression="CODE" />
            </Columns>
            <RowStyle CssClass="MainCenter" />
            <HeaderStyle Font-Bold="True" />
            <AlternatingRowStyle CssClass="AltCenter" />
        </asp:GridView>
<asp:sqldatasource id="SimpleDatasource" 
          ConflictDetection="CompareAllValues" 
          selectcommand="Select STRASSE_SEQ, CODE From STRASSE"
          updatecommand="Update STRASSE SET CODE=:CODE Where STRASSE_SEQ=:original_STRASSE_SEQ"
          Connectionstring="<%$ ConnectionStrings:MyOraConString%>" 
          ProviderName="System.Data.OracleClient"
          OldValuesParameterFormatString="original_{0}" 
          runat="server">
          <UpdateParameters>
            <asp:Parameter Type="String" Name=":CODE"></asp:Parameter>
            <asp:Parameter Type="Decimal" Name=":original_STRASSE_SEQ"></asp:Parameter>
          </UpdateParameters>               
      </asp:sqldatasource>

Hatte ev. vermutet, dass es irgendwie am Datentyp liegt (hatte vorher einen NUMBER, den ich nur einem Decimal zuweisen konnte). In WindowsForms konnte ich hier auch OracleClient.OracleType.Number nutzen. Innerhalb der Parameterliste wird mir diese Varinate allerdings nicht erlaubt...

Am Anfang hatte ich es natürlich ganz einfach ohne Parameter und das "original-{0}", war aber derselbe Effekt!
Mit der Datenanzeige gibt es keine Probleme... 🤔 fast keine...der Cast eines Number-Wertes in eine Spalte mit asp:CheckBoxField funktioniert nicht. Da ich hier aber nur DataSource referenziere auf welche ich kein Convert o.ä. absetzen kann, habe ich auch noch nicht rausgefunden, wie ich das zum Laufen bringe. *säufts

Aller Anfang ist schwer!

Gruß
Kerstin

13 Beiträge seit 2007
vor 17 Jahren

Ich hab jetzt keinen Oracle-Server hier also kann ich meine Behauptung nicht überprüfen, aber wenn ich den Text hier richtig verstanden habe, dann müsstest du das so schreiben:


<UpdateParameters>
            <asp:Parameter Type="String" Name="CODE"></asp:Parameter>
            <asp:Parameter Type="Decimal" Name="original_STRASSE_SEQ"></asp:Parameter>
</UpdateParameters>

Also ohne die Doppelpunkte.
Ich hoffe das hilft dir weiter.

So long,
Chrisu

K
Kiki7 Themenstarter:in
45 Beiträge seit 2006
vor 17 Jahren

Hi Chrisu,
ich hatte es auch zuerst ohne, dann habe ich in irgend einem Beispiel diese Variante gesehen und hatte es einfach ausprobiert. Beide mit dem gleichen Ergebnis...
Fälllt euch sonst noch irgend etwas auf, was diesen Fehler hervorrufen könnte?

Gruß
Kerstin

K
Kiki7 Themenstarter:in
45 Beiträge seit 2006
vor 17 Jahren

Hallo zusammen,
habe nochmal mit einer neuen Anwendung gestartet und vom simpelsten Aufbau begonnen. So konnte ich zumindest ein Problem erkennen, verstehe aber absolut nicht, warum das zu einem Fehler führt:


<asp:SqlDataSource ID="SqlDataSource1" runat="server" 
        ConnectionString="Password=xxx;User ID=xxx;Data Source=xxx" 
        ProviderName="System.Data.OracleClient" 
        SelectCommand="Select STRASSE_SEQ, TITEL, HOEHE from STRASSE" 
        UpdateCommand="update STRASSE set TITEL=:TITEL, HOEHE=:HOEHE where STRASSE_SEQ=:STRASSE_SEQ" ></asp:SqlDataSource>
        
        <asp:GridView ID="GridView1" runat="server" 
        AutoGenerateEditButton="false" 
        DataSourceID="SqlDataSource1" 
        AutoGenerateColumns="false">
         <Columns>
           <asp:CommandField ButtonType="Button" EditText="Ändern" ShowEditButton="True"/>
           <asp:BoundField DataField="STRASSE_SEQ" HeaderText="Seq" SortExpression="STRASSE_SEQ" Visible="false"/>                
           <asp:BoundField DataField="TITEL" HeaderText="Titel" SortExpression="TITEL" />
           <asp:BoundField DataField="HOEHE" HeaderText="Höhe" SortExpression="HOEHE" /> 
        </Columns>
        </asp:GridView>

Der Fehler ist: Visible="false" in der Spalte STRASSE_SEQ.
Warum bekomme ich den Fehler "ORA-01008: not all variables bound
", wenn ich den Update-Befehl absetze? (Passiert auch, wenn ich STRASSE_SEQ auf ReadOnly="true" setze). Wenn ich die Spalte ganz entferne und STRASSE_SEQ im Grid unter DataKeyNames aufführe, bekomme ich auch eine Fehlermeldung.

WARUM DARF ICH DAS NICHT MACHEN?

*grml Ich bin doch sicher nicht die einzige, welche einen Update über eine eindeutige ID generieren möchte, diese aber nicht anzeigen will..

Wäre toll, wenn mir das jemand erklären könnte.

Lieber Gruß
Kerstin

181 Beiträge seit 2006
vor 17 Jahren

vermutlich wird dich das jetzt nicht zufrieden stellen,

aber versuche es doch mal mit sowas

<asp:Literal ID="lblStrasse"  runat="server" Text='<%# Bind("STRASSE_SEQ") %>'></asp:Literal>

bound fields mag ich nicht