Delete přes SessionParameter   zodpovězená otázka

ASP.NET WebForms

Mám GridView ve kterém selektuji nějaký řádek a a výsledek ukládám do Session. Obsah této Session chci použít jako parametr pro DeleteCommand a pomocí tlačítka,která je mimo GridView, které má vlastnost CommandName="Delete" chci daný řádek smazat, to tlačítko mi ale udělá jen Postback a nic to nesmaže. Pokud ale používám tlačítko delete, které se vygeneruje při přidání sloupce delete v GridView tak mi to hodí následující chybu:"System.Data.OracleClient.OracleException: ORA-01036: nepřípustné jméno nebo číslo proměnné". Session se naplní správně, to kontroluji přes <%Response.Write(Session["kod_rekl"]);%> , používám databázi Oracle. Zkoušel jsem to i přes proceduru, ale ta procedura se ani nezavolá. Nevíte v čem by mohl být problém?

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Jinak tady přikládám kódy

<DeleteParameters>
                <asp:SessionParameter Name="parameter"
Type="String" />
            </DeleteParameters>

DeleteCommand="DELETE FROM TABULKA WHERE SLOUPEC_ID = :parameter"

Výběr řádku a uložení do Session.

GridViewRow row = GridView1.SelectedRow;
            int index = GridView1.SelectedIndex;
            Session["parameter"] = GridView1.DataKeys[index].Value.ToString();

nahlásit spamnahlásit spam 0 odpovědětodpovědět

U sessionparametru jsem zde zapoměl dopsat vlastnost SessionField.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Můžu se zeptat proč na toto využíváte session? Myslím,že to není zrovna vhodné...raději session vůbec nepoužívat,pokud to není nezbytně nutné.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Protože Session["parameter"] používám na stránce i k jiným účelům a tak jsem ji chtěl využít i zde. Co by podle Vás bylo tedy lepší řešení?

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Používat na tohle Session je velmi špatné řešení - co když si uživatel otevře stejnou stránku ve dvou záložkách prohlížeče? bude si session navzájem přepisovat!

Nepoužívejte session, je úplně k ničemu, vždy se dá nahradit něčím jiným, co je spolehlivější a adekvátnější.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Záleží také jak máte nastaven samotný GridView,ale jinak by to mělo být cca takhle:

DeleteCommand="DELETE FROM TABULKA WHERE SLOUPEC_ID = @parameter"

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Takhle to mám, ale vzhledem k tomu, že nepoužívám MS databázi, ale Oracle tak místo zavináče se zapisuje dvojtečka.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Máte pravdu,přehlédl jsem,že jde o Oracle.A není problém v definici samotného SessionParameters,opravdu má být typu String?

nahlásit spamnahlásit spam 0 odpovědětodpovědět

SLOUPEC_ID je typu string, takže ten parameter by měl být taktéž.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Dejte sem ještě kód GridView

nahlásit spamnahlásit spam 0 odpovědětodpovědět
<asp:GridView ID="GridView1" runat="server" AllowPaging="True" 
            AllowSorting="True" AutoGenerateColumns="False" DataKeyNames="SLOUPEC_ID" 
            DataSourceID="SqlDataSource1" 
          onselectedindexchanged="GridView1_SelectedIndexChanged"
            OnRowDataBound="GridView_RowDataBound">
            <Columns>

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Zkuste toto:

DeleteCommand="DELETE FROM TABULKA WHERE SLOUPEC_ID = <%=Session["parameter"] %>"

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Takto mi to vypíše že to to nesmí obsahovat <>:" Server tags cannot contain <% ... %> constructs."

nahlásit spamnahlásit spam 0 odpovědětodpovědět

To Vás ako napadlo do hodnoty atribútu vložiť tag ?

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Na <%= %> a <% %> zapoměňte a nikdy nikomu tenhle přežitek nedoporučujte! V ASP.NET se používat nemají!

nahlásit spamnahlásit spam 0 odpovědětodpovědět

A IDčka by také neměla být typu string, používejte INT nebo GUID, je to mnohem rychlejší. String je pěkná prasečina.

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback