Volíní SQL funkcí v .NET – .NET – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Volíní SQL funkcí v .NET – .NET – Fórum – Programujte.comVolíní SQL funkcí v .NET – .NET – Fórum – Programujte.com

 

cheeester0
Stálý člen
24. 8. 2010   #1
-
0
-

Ahoj, prosím o radu. Mám v MSSQL vlastní funkce (Functions), které vyhledají data v databázi s návratovou hodnotou True / False.

Jak tyto funkce mohu z .NET zavolat? Předem děkuji

Nahlásit jako SPAM
IP: 80.188.27.–
Chrasty
~ Redaktor
+4
Posthunter
24. 8. 2010   #2
-
0
-

Pomocí select dotazu:

SELECT * FROM dbo.MojeFunkce()

Nahlásit jako SPAM
IP: 193.179.196.–
cheeester0
Stálý člen
24. 8. 2010   #3
-
0
-

To Chrasty :

Děkuji! Tu návratovou hodnotu pak zjístím ještě jak?

dbo. je pak název databáze?

Nahlásit jako SPAM
IP: 80.188.27.–
velurex0
Stálý člen
Nahlásit jako SPAM
IP: 213.191.119.–
cheeester0
Stálý člen
24. 8. 2010   #5
-
0
-

velurex napsal:
http://www.java2s.com/Tutorial/CSharp/0560__ADO.Net/ExecuteScalarExample.htm



Tak to asi není to co jsem hledal. Moc se mi nedaří vytvořit jednoduché funkční řešení, kdy mám formulář se dvěmi poli. Po odeslání tyto dvě hodnoty předám do funkce na SQL a vrátím do formuláře výsledek o shodě či nikoliv. Byl by někdo ochoten mi s tím pomoci? Předem děkuji

Nahlásit jako SPAM
IP: 80.188.27.–
splite0
Newbie
1. 9. 2010   #6
-
0
-

Nemyslel jsi to takhle nějak?

var _connection = connection; // ... 

SqlCommand cmd =SqlCommand("SELECT ScalarFunction(@prvni, @druhy) as blabla;", _connection); // vlastni query
cmd.Parameters.Add("@prvni", SqlDbType.NVarChar).Value = "ahoj"; // parametr jedna co tam posilam
cmd.Parameters.Add("@druhy", SqlDbType.NVarChar).Value = "světe"; // parametr dva
bool jaktotedaje = (bool)cmd.ExecuteScalar(); // scalar - vrátí první


Totiž ta Query co psal Chrasty je jen pro table-value funkce - funkce ktera vrátí celou tabulku. Pozor ale:

Ty jsi ale psal "které vyhledají data v databázi s návratovou hodnotou True / False." což je trošinku zavádějící :-/

Pokud má fce návratovou hodnotu třeba BIT (tzn právě true nebo false) nebo jakoukoliv jinou - za předpokladu že je jen jedna jediná - mluvíme o "skalárních (ang Scalar) funkcích" a ty se volají jak jsem ti napsal v příkladě ( select fce(); ). Podle tvého popisu jsem napoprvé pochopil že takovou fci máš, kupříkladu kontroluje zda jsou data třeba přítomná a vrátí "ano, tenhle záznam tu je/ne, záznam tu není." nebo tak.

Pokud ovšem jsi chtěl říct "tabulku s hodnotamy true nebo false" - "table-valued funkci" (tedy těch true / false bude třeba milion) tak k vlastní fci skutečně přistupuješ jako k tabulce a voláš nad ní select jako nad jakoukoliv "fyzickou" a platí přesně to co napsal Chrasty.

Nejlepší by bylo kdyby jsi sem poslal tu svou db fci ať na to můžem mrknout.

Edit: Jéééé, tímhle postem level myška! :D

Nahlásit jako SPAM
IP: 92.62.224.–
splite0
Newbie
1. 9. 2010   #7
-
0
-

Trošičku posthunt (už jsem myška! :D ), ale k věci:

Skalární fce vypadá nějak třeba takhle:

CREATE FUNCTION dbo.ScalarFunction()

RETURNS BIT
AS
BEGIN
RETURN 1
END
Tahle je hodně triviální, vrátí jen true :)
Query na ní bude "select dbo.ScalarFunction() as vzdyTrue;"

Table-valued funkce vrátí celou tabulku a vypadá kupříkladu takhle:
CREATE FUNCTION dbo.DataProTiskFaktury (@idFaktury int)

RETURNS TABLE
AS
RETURN SELECT Faktury.id, Faktury.datum, Faktury.splatnost, Polozky_objednavky.mnozstvi,
Zakaznici.jmeno, Zakaznici.prijmeni, Zakaznici.ulice, Zakaznici.cp, Zakaznici.mesto,
Zakaznici.PSC, Kvetiny.rodovy_nazev, Kvetiny.druhovy_nazev, Kvetiny.jednotka_mnozstvi, Kvetiny.cena
FROM Faktury INNER JOIN
Objednavky ON Faktury.objednavka = Objednavky.id INNER JOIN
Polozky_objednavky ON Objednavky.id = Polozky_objednavky.id_objednavky INNER JOIN
Zakaznici ON Objednavky.zakaznik = Zakaznici.id INNER JOIN
Kvetiny ON Polozky_objednavky.zbozi = Kvetiny.id
WHERE (Faktury.id = @idFaktury);

Na tuhle bude query "select * from dbo.DataProTiskFaktury(1);" (je z jednoho hodně starého projektu do školy)


Pak jsou ještě inline fce ale přiznám se že těm moc nerozumím.

Nahlásit jako SPAM
IP: 92.62.224.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 12 hostů

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý