Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
Tomas Laska
Člen
Avatar
Tomas Laska:6.1.2014 16:24

ahojte mam takuto ulohu.
V cvicnej databaze Northwind.accdb je tabulka Orders Details, ktora obsahuje zoznam
predanych produktov. Zostavte dopyt (Queries), ktory potom v programe bude
vystupovat ako ulozena procedura, pomocou nej urcite celkovu trzbu predanych
produktov. (Zostavte SQL prikaz, v ktorom pouzijete funkciu SUM). Nezabudnite
odpocitat zlavu na urcite produkty (Discount). Napiste program ( moze to byt aj
konzolova aplikacia), kde dopyt bude tvorit ulozena procedura, ktora po spusteni
vypocita celkovu trzbu pre predane produkty.

najskor som ulozil proceduru so vstupnym parametrom
CREATE PROCEDURE sp_ordersByEm­ployeeId
@EmployeeID int
AS
SELECT OrderID, CustomerID
FROM Orders
WHERE EmployeeID=@Em­ployeeID
GO
EXECUTE sp_ordersByEm­ployeeId 2


takto zistujem dopyt
CREATE PROCEDURE sp_ordersByEm­ployeeId2
@EmployeeID int,
@OrderCount int = 0 output
AS
SELECT OrderID, CustomerID
FROM Orders
WHERE EmployeeID = @EmployeeID;

SELECT @OrderCount = count(*)
FROM Orders
WHERE EmployeeID = @EmployeeID
RETURN @OrderCount


otestovanie procedury
DECLARE @return_value int,
@OrderCount int
EXECUTE @return_value = sp_ordersByEm­ployeeId2
@EmployeeID = 2,
@OrderCount = @OrderCount OUTPUT
SELECT @OrderCount as '@OrderCount'
SELECT 'Return value' = @return_value

respektive skusal som to aj takto konzolovovou aplikaciou

using System;
using System.Data;
using System.Data.OleDb;

class CallSp1
{
static void Main()
{
// vytvor pripojenie
OleDbConnection conn = new OleDbConnecti­on(@"Provider =
Microsoft.ACE­.OLEDB.12.0;
Data Source=U:\Nor­thwind.accdb");
try
{
conn.Open();

// vytvor prikaz
OleDbCommand cmd = conn.CreateCom­mand();

// specifikacia ulozenej procedury na spustenie
cmd.CommandType = CommandType.Sto­redProcedure;
cmd.CommandText = "Invoices";

// vykonaj prikaz
OleDbDataReader rdr = cmd.ExecuteRe­ader();

// zpracuj vyslednu sadu
while (rdr.Read())
{
Console.Write­Line("{0} {1} {2}",
rdr[0].ToStrin­g().PadRight(5),
rdr[1].ToString(),
rdr[2].ToString());
}
rdr.Close();
}
catch (OleDbException ex)
{
Console.Write­Line(ex.ToStrin­g());
}
finally
{
conn.Close();
}
Console.ReadLine();
}
}

toto je vystup zamestnancov, ale ani to mi nejde viete mi s tým pomôcť ??
respektive kde som spravil chybu ?

 
Odpovědět
6.1.2014 16:24
Avatar
hanpari
Tvůrce
Avatar
hanpari:6.1.2014 20:37

No a v čem je přesně tvůj problém? Pokud ti nefungovala testovací procedura v databázi, proč sis myslel, že bude fungovat dotaz ze csharpu? Ty jednotlivé uložené procedury fungují?

 
Nahoru Odpovědět
6.1.2014 20:37
Avatar
Tomas Laska
Člen
Avatar
Odpovídá na hanpari
Tomas Laska:6.1.2014 21:43

tá procedúra so vstupným parametrom mi funguje a tá konzolová aplikácia tá mi nevie načítať tú databázu a môj problém spočíva v tom, že mám problém zostavyť dopyt (Queries), ktory potom v programe bude
vystupovat ako ulozena procedura to mi nejde.

 
Nahoru Odpovědět
6.1.2014 21:43
Avatar
hanpari
Tvůrce
Avatar
hanpari:6.1.2014 22:02

Možná se špatně dívám, ale nikde nevidím, že bys programu řekl, jakou uloženou proceduru má vykonat.

Tohle je jediné, co se tomu vzdáleně podobá:

cmd.CommandText = "Invoices";

Ale žádnou proceduru "Invoices" nevidím. Tohle je asi víc co potřebuješ, ovšem pro MS SQL server. princip by měl být stejný.:

conn = new SqlConnection("Ser­ver=(local);Da­taBase=master;In­tegrated Security=SSPI");
conn.Open();
SqlCommand cmd = new SqlCommand("dbo­.test", conn);
cmd.CommandType = CommandType.Sto­redProcedure;
rdr = cmd.ExecuteRe­ader();

kde dbo.test je právě jméno procedury. Vyzkoušej, jestli to bude fungovat s OLEDB.

Mimochodem, ten tvůj program ti musel vyhodit nějakou výjimku, například o tom, že žádnou takovou proceduru nenašel. To je, co bys měl napsat.

Editováno 6.1.2014 22:04
 
Nahoru Odpovědět
6.1.2014 22:02
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 4 zpráv z 4.