Parameter procedúry   zodpovězená otázka

C#, SQL, ADO.NET, Databáze

Zdravím,

mam problem z parametrami procedury

PROCEDURE [dbo].[ZmazOdbPrisl] 
	-- Add the parameters for the stored procedure here
	@PrislusnikId int,
	@OdbPrislId int,
	@Zmenil nvarchar(50),
	@ZmenDna datetime
AS
BEGIN
	DELETE FROM [OdbPrislusnika] WHERE [OdbPrislId] = @OdbPrislId

	UPDATE Prislusnici SET	Zmenil= @Zmenil, ZmenDna=@ZmenDna
		WHERE PrislusniciId = @PrislusnikId		

ked odchytim udalost GridView2_RowDeleting a chcem pridať do parametrov hodnoty tak vobec nezbehne procedura, apon si myslim.

protected void GridView2_RowDeleting(object sender, GridViewDeleteEventArgs e)
{
  MembershipUser user = Membership.GetUser();
  e.Values["PrislusnikId"] = Request.QueryString["Cislo"];
  e.Values["ZmenDna"] = DateTime.Now;
  e.Values["Zmenil"] = user.UserName;
}

ked len dam pred evalues lomitka

protected void GridView2_RowDeleting(object sender, GridViewDeleteEventArgs e)
{
  MembershipUser user = Membership.GetUser();
  //e.Values["PrislusnikId"] = Request.QueryString["Cislo"];
  //e.Values["ZmenDna"] = DateTime.Now;
  //e.Values["Zmenil"] = user.UserName;
}

tak mi sice zmaze podradený zaznam v tabulke OdbPrislusnika ale nezmeni hodnoty v nadradenej tabulke Prislusnici .

Skusal to v inwj diskusíí ale neuspel som. Tak som skúsil funkciu nechat len som srušil predanie parametrov.

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

A co přesně to udělá, když ty řádky necháte nezakomentované? Spadne to na chybě? Nebo to nic neudělá?

Dejte do té procedury breakpoint a podívejte se, jestli se vůbec spustí.

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

Ako sa dá dat debugovať ulozena procedura na SQL.

Popravde toto ešte neviem a rad by som sa to naučil. Zatial mam iba SQL Express 2005 ide to aj na tejto verzii?

Ale inak to neurobi nic. Bez chyby. Staci nezakomentovat iba jedno priradenie.

Ako nahle zakomentujem vsetky tri tak to zbehne ako má. Teda zmaze dany zaznam z tabulky OdbPrislusnika. Ale samozrejme nezmeni polozky zmenil a zmendna v nadradenej tabulke.

Ozaj aby som nezabudol ,tabulky nie su relacne prepojené.

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

Sorry , Tomáš ty si asi nemyslel tú uloženú procedúru.

ale túto

 protected void GridView2_RowDeleting(object sender, GridViewDeleteEventArgs e)
    {
        MembershipUser user = Membership.GetUser();
        e.Values["PrislusnikId"] = Request.QueryString["Cislo"];
        e.Values["ZmenDna"] = DateTime.Now;
        e.Values["Zmenil"] = user.UserName;
    }

Tak tá sa spúšťa vždy.

Ale bodlo by mi vedieť či sa dá nejako debugovať uložená SQL procedúra ktorú vlastne volám.

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

Nebude problém jen v tom, že Request.QueryString["Cislo"] vrátí string a ne int ?

Nepomohlo by převést na int ?

ZK

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

Podla mna by vadit nemalo lebo pouzivam to iste aj pre insert nového záznamu aj pre update záznamu a funguje to.

    protected void FormView2_ItemInserting(object sender, FormViewInsertEventArgs e)
    {
        MembershipUser user = Membership.GetUser();
        e.Values["PrislusnikId"] = Request.QueryString["Cislo"];
        e.Values["ZmenDna"] = DateTime.Now;
        e.Values["Zmenil"] = user.UserName;

    }
    protected void GridView2_RowUpdating(object sender, GridViewUpdateEventArgs e)
    {
        MembershipUser user = Membership.GetUser();
        e.NewValues["PrislusnikId"] = Request.QueryString["Cislo"];
        e.NewValues["ZmenDna"] = DateTime.Now;
        e.NewValues["Zmenil"] = user.UserName;
    }
    protected void GridView2_RowDeleting(object sender, GridViewDeleteEventArgs e)
    {
        MembershipUser user = Membership.GetUser();
        //e.Values["PrislusnikId"] = Request.QueryString["Cislo"];
        //e.Values["ZmenDna"] = DateTime.Now;
        //e.Values["Zmenil"] = user.UserName;
    }

Lebo v definici parametrov sqldatasource je to ako int.

  <moje:RedirectingSqlDataSource ID="sourceOdbornP" runat="server" ConnectionString="<%$ ConnectionStrings:PersonalConnectionString %>" 
            DeleteCommand="ZmazOdbPrisl" DeleteCommandType="StoredProcedure"  
            InsertCommand="VlozOdbPrislusnika" InsertCommandType="StoredProcedure"   
            SelectCommand="GetOdbPrislusnika" SelectCommandType="StoredProcedure"   
            UpdateCommand="EditOdbPrislusnika" UpdateCommandType="StoredProcedure" 
        RedirectAfterDataOperation="True" >
            <SelectParameters>
                <asp:QueryStringParameter DefaultValue="" Name="PrislusnikId" QueryStringField="Cislo" Type="Int32" />
            </SelectParameters>
            <DeleteParameters>
                <asp:Parameter Name="PrislusnikId" Type="Int32" />
                <asp:Parameter Name="OdbPrislId" Type="Int32" />
                <asp:Parameter Name="Zmenil" Type="String" />
                <asp:Parameter Name="ZmenDna" Type="DateTime" />
            </DeleteParameters>
            <UpdateParameters>
                <asp:Parameter Name="PrislusnikId" Type="Int32" />
                <asp:Parameter Name="DatumOd" Type="DateTime" />
                <asp:Parameter Name="DatumDo" Type="DateTime" />
                <asp:Parameter Name="Preukaz" Type="String" />
                <asp:Parameter Name="Skolil" Type="Int32" />
                <asp:Parameter Name="OdbPrislId" Type="Int32" />
                <asp:Parameter Name="Zmenil" Type="String" />
                <asp:Parameter Name="ZmenDna" Type="DateTime" />
            </UpdateParameters>
            <InsertParameters>
                <asp:Parameter Name="PrislusnikId" Type="Int32" />
                <asp:Parameter Name="Odbornost" Type="Int32" />
                <asp:Parameter Name="DatumOd" Type="DateTime" />
                <asp:Parameter Name="DatumDo" Type="DateTime" />
                <asp:Parameter Name="Preukaz" Type="String" />
                <asp:Parameter Name="Skolil" Type="Int32" />
                <asp:Parameter Name="Zmenil" Type="String" />
                <asp:Parameter Name="ZmenDna" Type="DateTime" />
            </InsertParameters>
    </moje:RedirectingSqlDataSource>

Je SQL Profiler aj vo verzii SQL 2005 Express ?

Dakujem

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

Použijte SQL profiler a mrkněte co do té procedury posíláte.

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

Da sa nejak nahradit profiler lebo som zistil ze v Express verzii nieje.

Alebo treba si radsej nainstalovat na stroj kde vyvijam app sql plny a na server potom staci len Express. Nebude mat potom Express problem s s mdf-kom z plnej verzie ?

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

Existuje jistá náhrada ofic.profileru.V google search je to mezi prvními odkazy - ale sám jsem tento SW nikdy netestoval.

Další možností je právě rozchození Full instalace SQL serveru na vývoj.prostředí,ale jestli je tam nějaký problém s přechody mezi verzemi netuším - převážně pracuji s Oracle DB.

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

Chcem sa spytat, ci by nebolo lepsie radsej zavesit nieco na event RowDeleted ale aby to neposielalo do povodnej ulozenej procedury potrebne parametr,e ale aby to zavolalo uplne inu ulozenu proceduru ktora by uz len urobila update potrebneho záznamu a nestarala sa o samotny vymaz zaznamu z podradenej tabulky. Tu povodnu proceduru zmenit len na vymazanie zaznamu.

Vdaka za odpoved.

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

Můžete z původní procedury volat novou proceduru anebo si rovnou vytvořit Package.

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

no to je práve ten problém, kedže nemám profiler a už viem že v express nieje vobec neviem co to vlastne robí.

Preto uvazujem to úplne rozdelit. A zároven kedze to urobin na Udalost RowDeleted a ni na RowDeleting môze to byt lepsie lebo to naozaj urobí tu druhú operáciu az vtedy ked je ten záznam naozaj zmazaný. Len neviem ako to urobiť.

Dik za radu.

PS: Pozeral som odkaz na nie Express verziu SQL2005 ale nikde nič. Všade je už len 2008 .

A toho sa bojím, lebo naozaj neviem ako to bude ked bude databaza potom presunutá na hosting kde je len Express 2005.

Nedal by sa prípadne vyvolať nejako formiew updating z udalosti gridview rowdeleted ktorý je na tej istej stránke a má za úlohu práve update tejto tabulky?

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

Řešíte nesmysly, nesnašte se to ochcat, ale vyřešit.

Jak sám píšete, událost RowDeleting se vám zavolá. Dejte si do ní breakpoint, prohlédněte si tu kolekci parametrů, kterou tam posíláte, a zkuste tu storku zavolat proti databázi ručně a podívat se, jestli něco udělá.

Pokud vám to samé funguje v update, není důvod, proč by to nefakčilo v delete události.

Debugovat stored procedury umí podle mě až SQL Server 2008.

Jinak profiler je k dispozici jen ve vyšších edicích, ale můžete použít tenhle free http://sites.google.com/site/sqlprofiler....

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