Laden...

Datenübergabe aus gespeicherter Prozedur

Erstellt von hoenen01 vor 17 Jahren Letzter Beitrag vor 17 Jahren 2.766 Views
H
hoenen01 Themenstarter:in
8 Beiträge seit 2006
vor 17 Jahren
Datenübergabe aus gespeicherter Prozedur

Hallo, vieleicht kann mir ja jemand helfen
Ich habe in SQL-Server 2005 eine Prozedur gespeichert ala
Create meineSumme
@Datum (datetime)
@Name varchar(10)
@Summe decimal output
SET @Summe=(Select SUM(Summenfeld) from .... where Name=@Name..
Return @Summe

Bis dahin alles o.k.
Im C# geht die Proz auch in den queriesTableAdapter.
Variable wird angelegt "decimal Summe=0;"
Beim übergeben der Parameter
meineSummequeriesTableAdapter(Datum, Name, ref Summe) kommt allerdings immer
die Fehlermeldung
-kann nicht von "ref decimal" in "ref decimal" convertiert werden.
Was ist da los? Beim übergeben von Strings funktioniert sowas. Das nützt mir hier blos nichts
Bitte um Hilfe
Danke
Sven

432 Beiträge seit 2005
vor 17 Jahren

hi sven

du solltest lieber eine user defined function nehmen statt ein argument eine stored procedure als OUT zu "vergewohltätigen":


CREATE FUNCTION meineSumme (
   @Datum   datetime,
   @Name    varchar(10)
)
RETURNS float
AS BEGIN

   declare 
      @result     float

   set @Summe=(Select SUM(Summenfeld) from .... where Name=@Name...

   return @result

END


im code rufst du dann ganz normal das ergebnis ab mit:


   sqlCommand.CommandType = System.Data.CommandType.StoredProcedure;
   sqlCommand.CommandText = "meineSumme";

// Init return object
   object result = DBNull.Value;
   SqlParameter returnVal = new SqlParameter("RETURN_VALUE",SqlDbType.Variant);

// Init return value parameter
   returnVal.Direction = ParameterDirection.ReturnValue;
   sqlCommand.Parameters.Add(returnVal);

// Execute the command
   _Affected = sqlCommand.ExecuteNonQuery();
   result = sqlCommand.Parameters["RETURN_VALUE"].Value;

gruß
ron

F
10.010 Beiträge seit 2004
vor 17 Jahren

Und ich würde eine Parametrisierte Query machen, die ist genausoschnell
und viel einfacher.


sqlCommand.CommandText = "Select SUM(Summenfeld) from .... where Name=@Name";
sqlCommand.Parameters.AddWithValue("@Name", DerWertVonName);
result = Convert.ToDouble( sqlCommand.ExecuteScalar() );

Es ist ein immernoch weit verbreiteter Irrglaube, das eine parametrisierte Query langsamer ist als eine SP.

432 Beiträge seit 2005
vor 17 Jahren

hi fzelle

um geschwindigkeit geht es hierbei eigentlich weniger, sondern vielmehr darum, dass meiner erfahrung nach sql anweisungen aus wartungsgründen in compiliertem code nichts zu suchen haben 😉

gruß
ron

F
10.010 Beiträge seit 2004
vor 17 Jahren

Ist richtig, aber wer erstellt die auch schon von hand?

Ich persönlich finde, das Businesslogic nichts in der Datenbank zu suchen hat.
Und Sql-Code nichts in der Anwendung.

Wer einmal von einem System ( manchmal nur ein Release ) aufs andere
umgestiegen ist, ist kuriert von den Ratschläge der DBA's soetwas in die DB zu tun.