Forums Neueste Beiträge
 

Skalarwertfunktion

18/09/2008 - 10:13 von Gerhard W. | Report spam
Hallo NG,

ich muss am SQL Server eine Skalarwerrtfunktion aufrufen, welche mir einen
XML-String zurückliefert. Da ich dies aber noch nie gemacht habe und auch im
Internet keine Doku finde, möchte ich um eure Hilfe bitten.

nachfolgend die Skalarwertfunktion am SQL Server:
ALTER FUNCTION [dbo].[fsGetLizenzgeberStatiXML]( @medienID int )
RETURNS nvarchar(4000)
AS
BEGIN
declare @ret nvarchar(4000)
declare @landKuerzel nvarchar(5)
declare @lzgKuerzel nvarchar(50)
declare @freigabeStatus nvarchar(50)

declare @actualDate smalldatetime
select @actualDate = MedienDatenbank.dbo.fsAlgConvertDateTimeToDate(
getDate() )

set @ret = '<?xml version="1.0" encoding="utf-8" ?><lizenzen>'

declare cur cursor local fast_forward for
select Laender.Kuerzel, Lizenzgeber.Kuerzel, ltrim( rtrim(
Freigaben.Status ) )
from MedienLizenzen
inner join Laender on MedienLizenzen.LaenderID = Laender.ID
inner join Lizenzgeber on MedienLizenzen.LizenzgeberID = Lizenzgeber.ID
inner join Freigaben on MedienLizenzen.FreigabeID = Freigaben.ID
where MedienID = @medienID
and von <= @actualDate
and ( bis is null or bis >= @actualDate )
open cur
fetch next from cur into @landKuerzel, @lzgKuerzel, @freigabeStatus

while @@fetch_status = 0 begin
set @ret = @ret + '<lizenz laenderkuerzel="' + @landKuerzel + '" '
set @ret = @ret + 'lizenzgeberKuerzel="' + @lzgKuerzel + '" '
set @ret = @ret + 'status="' + @freigabeStatus + '">'
set @ret = @ret + '</lizenz>'

fetch next from cur into @landKuerzel, @lzgKuerzel, @freigabeStatus
end

close cur
deallocate cur

set @ret = @ret + '</lizenzen>'

return @ret

...und hier den ASP.NET Code den ich verwenden möchte aber leider nicht
funktioniert:

Dim Connection As String =
ConfigurationManager.AppSettings("MedienDatenbank")
Dim SQLCommand As String = "dbo.fsGetLizenzgeberStatiXML(" + ID
+ ")"

Dim oledbCon As New OleDbConnection(Connection)
Dim oledbCommand As New OleDbCommand(SQLCommand, oledbCon)
oledbCon.Open()
oledbCommand.CommandType = CommandType.StoredProcedure
RetString = DirectCast(oledbCommand.ExecuteScalar, String)
oledbCon.Close()

Es kommt aber auch keine Fehlermeldung sondern RetString ist Nothing.

Die Skalarwertfunktion habe ich am SQL Server ausprobiert. Die funktioniert.

Danke für eure Hinweise.

Gerhard
 

Lesen sie die antworten

#1 Thomas Bandt
18/09/2008 - 11:26 | Warnen spam
Hallo,

Gerhard W. schrieb:
Hallo NG,

ich muss am SQL Server eine Skalarwerrtfunktion aufrufen,



was eigentlich nichts mit ASP.NET zu tun hat.

Dim Connection As String =
ConfigurationManager.AppSettings("MedienDatenbank")
Dim SQLCommand As String = "dbo.fsGetLizenzgeberStatiXML(" + ID
+ ")"

Dim oledbCon As New OleDbConnection(Connection)
Dim oledbCommand As New OleDbCommand(SQLCommand, oledbCon)
oledbCon.Open()
oledbCommand.CommandType = CommandType.StoredProcedure
RetString = DirectCast(oledbCommand.ExecuteScalar, String)
oledbCon.Close()

Es kommt aber auch keine Fehlermeldung sondern RetString ist Nothing.

Die Skalarwertfunktion habe ich am SQL Server ausprobiert. Die funktioniert.



Sieht okay aus, davon abgesehen dass du den Parameter via
SqlParameter übergeben solltest. Bist du mal mit dem Debugger
reingesprungen und hast geschaut, was überhaupt in "ID" also
dem Wert für @medienID drin steht?

Gruß, Thomas [MVP ASP/ASP.NET]
http://www.69grad.de - Beratung, Entwicklung
http://www.dotnetjob.de - .NET-Stellenbörse
http://blog.thomasbandt.de - Thomas goes .NET

Ähnliche fragen