Avatar billede gunn Nybegynder
12. marts 2007 - 15:29 Der er 8 kommentarer og
1 løsning

Konvertering af MSSQL query til Dataset query

Hej alle eksperter.
Jeg har lavet en query i SQL Server Management Studio, som jeg skal bruge i et dataset på en hjemmeside. Hvordan gør jeg det, da det så vidt jeg ved ikke er muligt at "declare" i et dataset.

min query ser således ud:


declare @dato smalldatetime
set @dato = '20-03-2007'

declare @periode  int
set @periode = 1
declare @bk int


set @bk = (SELECT  count(*)
FROM        dbo.Booking RIGHT OUTER JOIN
                      dbo.BaneInterval ON dbo.Booking.baneintervalID = dbo.BaneInterval.baneintervalID LEFT OUTER JOIN
                      dbo.Banepulje ON dbo.Booking.BaneID = dbo.Banepulje.BaneID
WHERE    (dbo.Booking.spilleDato = convert(datetime, @dato ,105)) and (dbo.Booking.baneintervalID = @periode))
print @bk


if @bk = 0
  select * from  dbo.Banepulje

else if @bk = 1
(select dbo.Banepulje.BaneID,dbo.Banepulje.Beskrivelse
                  from dbo.Booking, dbo.Banepulje
                  where
                        (dbo.Booking.spilleDato = convert(datetime, @dato ,105) ) and
                        (dbo.Booking.baneintervalID = @periode) and
                        (dbo.Banepulje.BaneID != dbo.Booking.BaneID))
else if @bk = 2
(select dbo.Banepulje.BaneID,dbo.Banepulje.Beskrivelse
                  from dbo.Booking, dbo.Banepulje
                  where
                        (dbo.Booking.spilleDato = convert(datetime, @dato ,105) ) and
                        (dbo.Booking.baneintervalID = @periode) and
                        (dbo.Banepulje.BaneID != dbo.Booking.BaneID))

else if @bk = 3
(select dbo.Banepulje.BaneID,dbo.Banepulje.Beskrivelse
                  from dbo.Booking, dbo.Banepulje
                  where
                        (dbo.Booking.spilleDato = convert(datetime, @dato ,105) ) and
                        (dbo.Booking.baneintervalID = @periode) and
                        (dbo.Banepulje.BaneID != dbo.Booking.BaneID))
else
  print 'hej'

Med venlig hilsen Martin
Avatar billede kalp Novice
12. marts 2007 - 16:38 #1
hvis du bare skal have et resultat tilbage så lav den om til en stored procedure..
så kan du kalde den normalt med lidt c# parametre og få et resultat tilbage.
Avatar billede dr_chaos Nybegynder
13. marts 2007 - 16:40 #2
Du kan mindske din sql til:
declare @dato smalldatetime
set @dato = '20-03-2007'

declare @periode  int
set @periode = 1
declare @bk int


set @bk = (SELECT  count(*)
FROM        dbo.Booking RIGHT OUTER JOIN
                      dbo.BaneInterval ON dbo.Booking.baneintervalID = dbo.BaneInterval.baneintervalID LEFT OUTER JOIN
                      dbo.Banepulje ON dbo.Booking.BaneID = dbo.Banepulje.BaneID
WHERE    (dbo.Booking.spilleDato = convert(datetime, @dato ,105)) and (dbo.Booking.baneintervalID = @periode))
print @bk


if @bk = 0
  select * from  dbo.Banepulje

else if @bk BETWEEN 1 AND 3
(select dbo.Banepulje.BaneID,dbo.Banepulje.Beskrivelse
                  from dbo.Booking, dbo.Banepulje
                  where
                        (dbo.Booking.spilleDato = convert(datetime, @dato ,105) ) and
                        (dbo.Booking.baneintervalID = @periode) and
                        (dbo.Banepulje.BaneID != dbo.Booking.BaneID))
else
  print 'hej'
Avatar billede dr_chaos Nybegynder
13. marts 2007 - 16:41 #3
Skal du lave denne select mod dit dataset eller skal din select danne basis for et dataset ?
Avatar billede gunn Nybegynder
13. marts 2007 - 17:32 #4
først og fremmest tak for svaret. Jeg er dog ikke helt sikker på hvad du mener med dit spørgsmål, hvis du kunne omskrive det ville det være dejligt.  Jeg skal bruge den til at spørge i databasen hvor efter jeg så vil bruge det jeg får ud.
Avatar billede dr_chaos Nybegynder
13. marts 2007 - 17:38 #5
du kan lave det som en stored procedure, som gawi skriver.
En lille artikel om stored procedures:
http://www.c-sharpcorner.com/UploadFile/dclark/InsOutsinCS11302005072332AM/InsOutsinCS.aspx
Avatar billede dr_chaos Nybegynder
13. marts 2007 - 17:40 #6
i dit tilfælde vil den se ud på denne måde:
Create procedure dbo.getBaneInfo
@dato smalldatetime,
@periode int
AS
BEGIN
declare @bk int


set @bk = (SELECT  count(*)
FROM        dbo.Booking RIGHT OUTER JOIN
                      dbo.BaneInterval ON dbo.Booking.baneintervalID = dbo.BaneInterval.baneintervalID LEFT OUTER JOIN
                      dbo.Banepulje ON dbo.Booking.BaneID = dbo.Banepulje.BaneID
WHERE    (dbo.Booking.spilleDato = convert(datetime, @dato ,105)) and (dbo.Booking.baneintervalID = @periode))
print @bk


if @bk = 0
  select * from  dbo.Banepulje

else if @bk BETWEEN 1 AND 3
(select dbo.Banepulje.BaneID,dbo.Banepulje.Beskrivelse
                  from dbo.Booking, dbo.Banepulje
                  where
                        (dbo.Booking.spilleDato = convert(datetime, @dato ,105) ) and
                        (dbo.Booking.baneintervalID = @periode) and
                        (dbo.Banepulje.BaneID != dbo.Booking.BaneID))
else
  print 'hej'
END
Avatar billede dr_chaos Nybegynder
13. marts 2007 - 17:48 #7
Du kan bruge din store procedure på denne måde:
public DataSet getdataset(DateTime dato, int periode)
{
DataSet results = new DataSet();

using(SqlConnection con = new SqlConnection(
                    "dinsqlconnection" ))
{
       
using(SqlCommand selectCmd = new SqlCommand("getBaneInfo", con ))
{
selectCmd.CommandType = CommandType.StoredProcedure;
selectCmd.Parameters.AddWithValue("@dato", Dato);
selectCmd.Parameters.AddWithValue("@periode", periode);
SqlDataAdapter da = new SqlDataAdapter( selectCmd ) ;

                da.Fill ( results, "dintabel" );
}
}
return results;
}
Avatar billede gunn Nybegynder
13. marts 2007 - 22:24 #8
Jeg siger mange tak for svaret, fik det til at virke med din hjælp :)
Avatar billede dr_chaos Nybegynder
14. marts 2007 - 10:58 #9
perfekt smider lige et svar så:)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester