Diskuze: Ulozena procedura

C# .NET .NET (C# a Visual Basic) Ulozena procedura American English version English version

Avatar
t.l.bubala
Člen
Avatar
t.l.bubala:

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
Redaktor
Avatar
hanpari:

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
t.l.bubala
Člen
Avatar
Odpovídá na hanpari
t.l.bubala:

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
Redaktor
Avatar
hanpari:

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.