SQL parametry - pojmenování místo otazníku   otázka

SQL, ASP.NET/IIS

Rád bych poprosil o radu ohledně ConnectionStringu - bohužel mi nechodí pojmenování parametru v SQL dotazu a musím místo toho používat otazník a zachovávat přesné pořadí.

Mám definovaný ConnectionString:

<connectionStrings>
     <add name="ConnectionString_local1" connectionString="Provider=SQLOLEDB;Data Source=localhost\SQLEXPRESS;Integrated Security=SSPI;Initial Catalog=XXXX"
</connectionStrings>

a SqlDataSource:

    <asp:SqlDataSource ID="SqlDataSource1" runat="server" 
        ConnectionString="<%$ ConnectionStrings:ConnectionString_local1 %>" 
        ProviderName="<%$ ConnectionStrings:ConnectionString_local1.ProviderName %>"
        SelectCommand="SELECT * FROM [tabulka] WHERE ([id] = ?)"        
        <SelectParameters>
            <asp:QueryStringParameter Name="id" QueryStringField="id" Type="Int32" />
        </SelectParameters>
    </asp:SqlDataSource>

Pokud použiji SQL s otazníkem - SelectCommand="SELECT * FROM [tabulka] WHERE ([id] = ?)" - vše funguje.

Pokud SQL parametr použiji jeho jménem - SelectCommand="SELECT * FROM [tabulka] WHERE ([id] = @id)" - vyhodí mi to chybu:

„Must declare the scalar variable "@id".“

Mohl by mi prosím někdo poradit, kde mám chybu a jak to udělat, abych mohl parametry SQL zadávat jejich jménem a ne otazníkem.

Předem moc děkuji za Váš čas a odpovědi.

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

Co máte na daný SqlDataSource nepojené..GridView,ListBox?

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

Zatím FormView (zobrazuje detaily dokladu), GridView (seznam dokladů) bude napojené v jiné stránce, ale SqlDataSource jsem chtěl nechat podobný - bude tedy stejný problém.

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

A máte opravdu v querystringu proměnnou "id" s nějakou hodnotou?

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

Zkuste u FormView nadefinovat vlastnost DataKeyNames="id"

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

Ale ona tam je.

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

Pokud to spustím bez proměnné, nic se do FormView nenačte (jak také jinak :-) ), ale nespadne to.

http://localhost:1980/XXX/edit.aspx

Pokud tam zadám proměnnou, vyhodí to tu hlášku:

http://localhost:1980/XXX/edit.aspx?id=5

"Must declare the scalar variable "@id".

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

Teď jsem to zkoušel..jak s FormView,tak s GridView a vše mi plně funguje...chyba nebude v definici SqlDataSource,ale jinde..tipl bych,že v samotním FormView

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

Porovnejte to s příkladem, který funguje:

http://asp-net-example.blogspot.com/2008...

Na první pohled problém nevidím.

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

Zdravim,

Deje se tak, protoze pouzivate provider SQLOLEDB. Ktery bere jako paramter "?". Pokud se tomu chcete vyhnout, pouzijte ulozene procedury (pokud muzete).

Tento zapis parametru [@id] funguje, pokud pouzivate provider SqlClient.

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