Avatar billede ha9953 Nybegynder
17. november 2004 - 17:34 Der er 16 kommentarer og
1 løsning

Hjælp til SelectCommand.Parameters.Add i datafunktion

jeg har en funktion, der hedder dspm, hvor jeg sender et dataset og en sqlsætning med over.

Sql-særningen kan f.eks se ud som følgende:

"SELECT * FROM nyhed WHERE nyhedid = @nyhedid"

Mit spørgsmål er nu om jeg i stedet for at have en fast defination af paramteren i dspm kan sende erklæringen med over så jeg kan lave en dynamisk funktion der opretter et dataset for mig ud fra forskellige sql-sætninger.

Håber det er til at forstå


Public Class datapm
Dim conn as new SQLConnection(ConfigurationSettings.AppSettings("db"))
public function dspm(ds as dataset,udtryk as string)
try   
dim adap As new SQLDataAdapter (udtryk,conn)
adap.SelectCommand.Parameters.Add("@nyhedid", SqlDbType.int).Value = "1"
adap.Fill(ds, "dt")
conn.Open()
catch t as exception       
System.Web.HttpContext.Current.response.write(t.tostring)       
Finally
conn.Close()
End Try
end function
end class
Avatar billede arne_v Ekspert
17. november 2004 - 17:41 #1
Utestet men prøv:

public function dspm(ds as dataset,udtryk as string, typ as SqlDbType, val as String)
try 
dim adap As new SQLDataAdapter (udtryk,conn)
adap.SelectCommand.Parameters.Add("@nyhedid", typ).Value = val
adap.Fill(ds, "dt")
conn.Open()
catch t as exception     
System.Web.HttpContext.Current.response.write(t.tostring)     
Finally
conn.Close()
End Try
end function
Avatar billede ha9953 Nybegynder
17. november 2004 - 17:43 #2
jeps - den have jeg selv regnet ud. Men hvis jeg nu skal have flere parametere i den samme sql-sætning? f.eks:

"SELECT * FROM nyhed WHERE nyhedid = @nyhedid And katid= @katid"

Men ellers tak for forsøget :-)
Avatar billede arne_v Ekspert
17. november 2004 - 17:46 #3
Du skrev jo "erklæringen" og det er jo ental så det var lidt svært at gætte
at du mente variabelt antal argumenter.
Avatar billede ha9953 Nybegynder
17. november 2004 - 17:48 #4
det kan du have ret i - sorry
Avatar billede arne_v Ekspert
17. november 2004 - 17:55 #5
Men er det så ikke bare at gøre typ og val til arrays ?
Avatar billede ha9953 Nybegynder
17. november 2004 - 17:59 #6
joo - nu er jeg ikke så mget inde i collections. Findes der en der kan acceptere 3 værdier for hver række?

Skal jo bruge 3 værdier hver gang:
adap.SelectCommand.Parameters.Add(værdi1, værdi2).Value = værdi3
Avatar billede arne_v Ekspert
17. november 2004 - 18:13 #7
3 argumenter som alle er arrays

en for løkke

element nummer i fra hvert array
Avatar billede arne_v Ekspert
17. november 2004 - 18:26 #8
public function dspm(ds as dataset,udtryk as string, nam as String(), typ as SqlDbType(), val as String())
try
dim adap As new SQLDataAdapter (udtryk,conn)
dim i as Integer
for i = 0 to (nam.Length - 1)
  adap.SelectCommand.Parameters.Add(nam(i), typ(i)).Value = val(i)
next
adap.Fill(ds, "dt")
conn.Open()
catch t as exception   
System.Web.HttpContext.Current.response.write(t.tostring)   
Finally
conn.Close()
End Try
end function
Avatar billede ha9953 Nybegynder
17. november 2004 - 18:30 #9
jeps - det var nu bare for at spare en masse arbejde - ville have været skønt hvis man kunne sige:

add("værdi","værdi","værdi")

Det ville spare nogle linier
Avatar billede arne_v Ekspert
17. november 2004 - 18:54 #10
Lav din egen klasse som indeholder 3 ArrayList's og har en Add, GetFirst, GetSecond
og GetThird metoder.
Avatar billede ha9953 Nybegynder
17. november 2004 - 19:05 #11
vil gerne give dit 50 point xtra hvis du kan lave den - bøvler helt vild med lortet
Avatar billede arne_v Ekspert
17. november 2004 - 19:06 #12
Du kan ikke give mere end 200.

Men jeg vil gerne lave den.

Giv mig 10 minutter.
Avatar billede ha9953 Nybegynder
17. november 2004 - 19:07 #13
¨fino
Avatar billede arne_v Ekspert
17. november 2004 - 19:23 #14
Imports System
Imports System.Collections

Public Class ThreeInOne
    Private list1 As ArrayList
    Private list2 As ArrayList
    Private list3 As ArrayList

    Public Sub New()
        list1 = New ArrayList
        list2 = New ArrayList
        list3 = New ArrayList
    End Sub

    Public Sub Add(ByVal o1 As Object, ByVal o2 As Object, ByVal o3 As Object)
        list1.Add(o1)
        list2.Add(o2)
        list3.Add(o3)
    End Sub

    Public Function GetFirst(ByVal ix As Integer) As Object
        Return list1(ix)
    End Function

    Public Function GetSecond(ByVal ix As Integer) As Object
        Return list2(ix)
    End Function

    Public Function GetThird(ByVal ix As Integer) As Object
        Return list3(ix)
    End Function

    Public ReadOnly Property Count() As Integer
        Get
            Return list1.Count
        End Get
    End Property
End Class

Class TestClass
    Public Shared Sub Main(ByVal args As String())
        Dim superlist As ThreeInOne = New ThreeInOne
        superlist.Add("a", 1, 1.2)
        superlist.Add("bb", 12, 12.34)
        Dim i As Integer
        For i = 0 To (superlist.Count - 1)
            Console.WriteLine(superlist.GetFirst(i) & " " & superlist.GetSecond(i) & " " & superlist.GetThird(i))
        Next
    End Sub
End Class
Avatar billede arne_v Ekspert
17. november 2004 - 19:23 #15
Jeg ved ikke om du har behov for mere end Add, Get og Count ...
Avatar billede ha9953 Nybegynder
17. november 2004 - 19:29 #16
noop perfekt - smid et svar :-)
Avatar billede arne_v Ekspert
17. november 2004 - 19:44 #17
kommer her
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