Fetstil Fetstil Kursiv Understrykning linje färgläggning tabellverk Punktlista Nummerlista Vänster Centrerat högerställt Utfyllt Länk Bild htmlmode
  • Forum & Blog
    • Forum - översikt
      • .Net
        • asp.net generellt
        • c#
        • vb.net
        • f#
        • silverlight
        • microsoft surface
        • visual studio .net
      • databaser
        • sql-server
        • databaser
        • access
        • mysql
      • mjukvara klient
        • datorer och komponenter
        • nätverk, lan/wan
        • operativsystem
        • programvaror
        • säkerhet, inställningar
        • windows server
        • allmänt
        • crystal reports
        • exchange/outlook
        • microsoft office
      • mjukvara server
        • active directory
        • biztalk
        • exchange
        • linux
        • sharepoint
        • webbservers
        • sql server
      • appar (win/mobil)
      • programspråk
        • c++
        • delphi
        • java
        • quick basic
        • visual basic
      • scripting
        • asp 3.0
        • flash actionscript
        • html css
        • javascript
        • php
        • regular expresssion
        • xml
      • spel och grafik
        • DirectX
        • Spel och grafik
      • ledning
        • Arkitektur
        • Systemutveckling
        • krav och test
        • projektledning
        • ledningsfrågor
      • vb-sektioner
        • activeX
        • windows api
        • elektronik
        • internet
        • komponenter
        • nätverk
        • operativsystem
      • övriga forum
        • arbete karriär
        • erbjuda uppdrag och tjänster
        • juridiska frågor
        • köp och sälj
        • matematik och fysik
        • intern information
        • skrivklåda
        • webb-operatörer
    • Posta inlägg i forumet
    • Chatta med andra
  • Konto
    • Medlemssida
    • Byta lösenord
    • Bli bonsumedlem
    • iMail
  • Material
    • Tips & tricks
    • Artiklar
    • Programarkiv
  • JOBB
  • Student
    • Studentlicenser
  • KONTAKT
    • Om pellesoft
    • Grundare
    • Kontakta oss
    • Annonsering
    • Partners
    • Felanmälan
  • Logga in

Hem / Forum översikt / inlägg

Posta nytt inlägg


SqlParameter med array som indata

Postades av 2005-12-05 16:05:48 - Johan Djupmarker, i forum asp.net generellt, Tråden har 14 Kommentarer och lästs av 494 personer

Jag har en int-array med okänt antal värden som jag vill skicka in som urval till ett databas-anrop. Finns det något snyggare sätt att göra detta än att bygga upp sql-satsen dynamiskt?

Jag skulle vilja göra såhär, fast det går ju inte med array som värde för parametern:

        SqlCommand cmd = new SqlCommand("SELECT Id, Namn FROM sKlienter WHERE Id IN(@Id)", DB.GetCon());
        int[] a = { 1, 2, 3 };
        cmd.Parameters.Add(new SqlParameter("@Id", a));


Använder .NET 2.0 och SQL Server 2005.

/Johan


Svara

Sv: SqlParameter med array som indata

Postades av 2005-12-05 18:24:34 - Patrik Löwendahl

        SqlCommand cmd = new SqlCommand("SELECT Id, Namn FROM sKlienter WHERE Id IN(@Id)", DB.GetCon());
        int[] a = { 1, 2, 3 };
        cmd.Parameters.Add(new SqlParameter("@Id", a.Join(',')));


Kanske funkar. Har ingen utv miljö så kan inte testa :)

Om du inte vill göra det där dynamiskt så kan du istället ta emot en ,-separerad lista i en proc (eller direkt i din ad-hoc query och göra om den till en tabel som du sedan kör din in på. Prestandan är nog inte lika bra dock, men det är en vanlig lösning på problemet. Googla lite på typ int list to table eller ngt sådant så hittar du nog.


Svara

Sv: SqlParameter med array som indata

Postades av 2005-12-05 21:35:21 - Andreas Hillqvist

Jag känner inte till att SQL server eller access skulle stödja arrayer som parametrar.
Data basmotorn tolkar parametern somm ett värde. Om @id = 5 ger det Id IN (5)

Om databasmotorn stödjer arrayer borde det väl vara något sådant här: Id IN @IdArray


Svara

Sv:SqlParameter med array som indata

Postades av 2005-12-06 11:00:27 - Johan Djupmarker

Det verkar inte gå att skicka in en kommaseparerad sträng och få den tolkad som flera int-värden på något enkelt sätt. Det blir nog till att bygga frågan dynamiskt i alla fall. Jag var mest ute efter en "snyggare" lösning som är lätt att läsa.

/Johan


Svara

Sv: SqlParameter med array som indata

Postades av 2005-12-06 11:52:14 - Håkan Borneland

Vad är tolkad på ett enkelt sätt?
Vi skickar in semikolonsparerad data mobilt in i våra system, fungerar utmärkt.

//Håkan


Svara

Sv:SqlParameter med array som indata

Postades av 2005-12-06 12:03:13 - Johan Djupmarker

Förenklat exempel (det blir ju såhär om man använder join):

        SqlCommand cmd = new SqlCommand("SELECT Id, Namn FROM sKlienter WHERE Id IN(@Id)", DB.GetCon());
        cmd.Parameters.Add(new SqlParameter("@Id", "1,2,3"));


Får ett meddelande i stil med "kan inte konvertera '1,2,3' till int.

Hur gör du? Jag vill alltså skicka in det via en parameter om det går.

/Johan


Svara

Sv: SqlParameter med array som indata

Postades av 2005-12-06 12:18:46 - Håkan Borneland

Ovanstående ser OK ut.
Verkar vara något annat.
Hur är @Id deklarerad?
Hur är mottagande parameter deklarerad som?
Deklarera dem som varchar.

Testa (något modifierad):
SqlCommand cmd = new SqlCommand("SELECT Id, Namn FROM sKlienter WHERE Id IN @Id", DB.GetCon());
cmd.Parameters.Add(new SqlParameter("@Id", "(1, 2, 3)"));

//Håkan


Svara

Sv:SqlParameter med array som indata

Postades av 2005-12-06 13:24:53 - Johan Djupmarker

Hur skulle jag kunna deklarera den som varchar?? Jag använder ingen SP utan en vanlig sql-fråga som du ser i exemplet.

Ditt förslag ger felaktigt syntax i SQL-satsen.

/Johan


Svara

Sv: SqlParameter med array som indata

Postades av 2005-12-06 15:13:49 - Håkan Borneland

Verkar vara dynamiskt bygge av sträng som gäller här, ledsen.
Om inte någon annan hacker har en lösning.
Missuppfattade lite hur du ville jobba.

//Håkan


Svara

Sv:SqlParameter med array som indata

Postades av 2005-12-06 15:29:05 - Ola Lindfeldt

Så här blir det isf:

IDList = "1,2,3,4,5,6,7,8,9"

sql = "SELECT Id, Namn FROM sKlienter WHERE Id IN (" & IDList & ")"




Svara

Sv: SqlParameter med array som indata

Postades av 2005-12-06 15:47:45 - Johan Djupmarker

Jojo, men nu frågade jag hur man gör det med parameter istället, inte dynamiskt uppbyggd sql...


Svara

Sv:SqlParameter med array som indata

Postades av 2005-12-07 00:03:59 - Ola Lindfeldt

Varför det?

Men ok då:

<code>
SqlCommand cmd = new SqlCommand("exec ('SELECT Id, Namn FROM sKlienter WHERE Id IN(' + @Id + ')')",
cmd.Parameters.Add(new SqlParameter("@Id", "1,2,3"));
</code>

;-)

Bättre med en Stored Proc,isf.
Finns även möjlighet att skicka in XML.
Regelrätta arrayer kan man inte skicka in.



Svara

Sv: SqlParameter med array som indata

Postades av 2005-12-07 08:15:35 - Johan Djupmarker

Anledningen är att jag tycker att det är lättare att läsa.

Men det där är ju en lösning som enligt mig blir lite "renare", kanske ska göra så istället.

/Johan


Svara

Sv:SqlParameter med array som indata

Postades av 2005-12-07 09:33:07 - Ola Lindfeldt

Eftersom du använder SQL server 2005 + .Net 2.0, så har du ju nya möjligheter att skicka in XML-datatyper samt kanske Table-variabler direkt (osäker om det funkar, ska kolla på det).
Men läs mer om nyheterna i ADO.NET 2/SQL 2005 så kanske du hittar nåt skoj! (Dela gärna med dig i.s.f.. :))


Svara

Sv: SqlParameter med array som indata

Postades av 2005-12-07 09:50:41 - Johan Djupmarker

Jo, det finns ju en hel del möjliga lösningar. Men jag vill helst hålla mig borta från SQL Server-specifika saker ifall man skulle behöva byta databas i framtiden (även om det inte är så troligt).

/Johan


Svara

Nyligen

  • 09:09 Vill du köpa medicinska tester?
  • 12:47 Vem beviljar assistansen – kommune
  • 14:17 Någon med erfarenhet av hemstädnin
  • 14:14 Bör man använda sig av en båtförme
  • 14:12 Finns det någon intressant hundblo
  • 14:25 Tips på verktyg för att skapa QR-k
  • 14:23 Tips på verktyg för att skapa QR-k
  • 20:52 Fungerer innskuddsbonuser egentlig

Sidor

  • Hem
  • Bli bonusmedlem
  • Läs artiklar
  • Chatta med andra
  • Sök och erbjud jobb
  • Kontakta oss
  • Studentlicenser
  • Skriv en artikel

Statistik

Antal besökare:
Antal medlemmar:
Antal inlägg:
Online:
På chatten:
4 569 607
27 953
271 705
534
0

Kontakta oss

Frågor runt konsultation, rådgivning, uppdrag, rekrytering, annonsering och övriga ärenden. Ring: 0730-88 22 24 | pelle@pellesoft.se

© 1986-2013 PelleSoft AB. Last Build 4.1.7169.18070 (2019-08-18 10:02:21) 4.0.30319.42000
  • Om
  • Kontakta
  • Regler
  • Cookies