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
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
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.
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
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.