Permalänk

SQL Server, behöver guidning!

Tjena! Försöker att lägga till ett fordon här vilket går bra för hand, men jag skulle vilja att fordonet läggs till på första bästa plats här, hur kan jag gå till väga?

using(SqlConnection dbConn = new SqlConnection(connString)) { SqlCommand cmd = new SqlCommand(sp, dbConn); cmd.CommandType = CommandType.StoredProcedure; addVehicle.VehicleType = UserInputHandler.GetVehicleType(); if (addVehicle.VehicleType == "Car") { addVehicle.VehicleRegNumber = UserInputHandler.GetVehicleRegNumberHandler(); cmd.Parameters.AddWithValue("@VehicleType", addVehicle.VehicleType); cmd.Parameters.AddWithValue("@VehicleRegNumber", addVehicle.VehicleRegNumber); cmd.Parameters.AddWithValue("@VehicleArrivalTime", DateTime.Now); SqlParameter vehicleID = new SqlParameter("@VehicleID", SqlDbType.Int); vehicleID.Direction = ParameterDirection.Output; cmd.Parameters.Add(vehicleID); cmd.Parameters.AddWithValue("@PSpaceNumber", 1); cmd.Parameters.AddWithValue("@PSpaceSize", 2); cmd.Parameters.AddWithValue("@PSpacesRemaining", 1); SqlParameter parkingSpaceID = new SqlParameter("@ParkingSpaceID", SqlDbType.Int); parkingSpaceID.Direction = ParameterDirection.Output; cmd.Parameters.Add(parkingSpaceID); try { dbConn.Open(); cmd.ExecuteNonQuery(); TextToUser.PrintVehicleAdded(); } catch (Exception msg) { TextToUser.PrintExceptionMessage(msg); } finally { dbConn.Close(); } }

Permalänk
Medlem

Jag förstår inte riktigt vad som du vill åstadkomma som du inte lyckas med men

Skall inte databasen vara öppen när man skapar Sql-kommandot och lägger till parametrar? Då får man väl en kontroll när parametrarna skapas?

Vad menas med första bästa plats?

Permalänk
Medlem

Jag antar att du har ett "parkeringshus", i detta finns ett fast antal p-platser, 100st?
Just nu så anger du "manuellt" vilken plats du ska parkera bilen på här:

cmd.Parameters.AddWithValue("@PSpaceNumber", 1); cmd.Parameters.AddWithValue("@PSpaceSize", 2); cmd.Parameters.AddWithValue("@PSpacesRemaining", 1);

Det du vill åstadkomma är att slippa ange plats "manuellt" ( SpaceNumber = 1 ) här och istället ska första lediga väljas?

Visa signatur

Ryzen 3600 | RX6800

Permalänk
Skrivet av JesperDa:

Jag antar att du har ett "parkeringshus", i detta finns ett fast antal p-platser, 100st?
Just nu så anger du "manuellt" vilken plats du ska parkera bilen på här:

cmd.Parameters.AddWithValue("@PSpaceNumber", 1); cmd.Parameters.AddWithValue("@PSpaceSize", 2); cmd.Parameters.AddWithValue("@PSpacesRemaining", 1);

Det du vill åstadkomma är att slippa ange plats "manuellt" ( SpaceNumber = 1 ) här och istället ska första lediga väljas?

Exakt så! Detta var för att testa så koden fungerade tillsammans med min stored procedure, nu vill jag att, precis dom du beskriver lägga in fordon på första bästa plats utan att skriva vilken plats det gäller liksom

Permalänk
Medlem
Skrivet av JesperDa:

Jag antar att du har ett "parkeringshus", i detta finns ett fast antal p-platser, 100st?
Just nu så anger du "manuellt" vilken plats du ska parkera bilen på här:

cmd.Parameters.AddWithValue("@PSpaceNumber", 1); cmd.Parameters.AddWithValue("@PSpaceSize", 2); cmd.Parameters.AddWithValue("@PSpacesRemaining", 1);

Det du vill åstadkomma är att slippa ange plats "manuellt" ( SpaceNumber = 1 ) här och istället ska första lediga väljas?

Om detta stämmer så behöver du ju ta bort den som inparameter. Du använder en lagrad procedur för att stoppa in bilen på en av en parameter angiven plats. Istället ska denna lagrade procedur själv "räkna ut" vilken som är nästa lediga plats. Det gör du i så fall internt i den genom att uföra en fråga innan själva insert-kommandot sker.

Det första steget borde vara att komma fram till en SQL-fråga som tar fram nästa lediga plats.

Permalänk
Skrivet av Mordekai:

Jag förstår inte riktigt vad som du vill åstadkomma som du inte lyckas med men

Skall inte databasen vara öppen när man skapar Sql-kommandot och lägger till parametrar? Då får man väl en kontroll när parametrarna skapas?

Vad menas med första bästa plats?

Connection är öppen i min try där den executar kommandon?
Att ett fordon läggs till på en ledig plats utan att jag behöver ange den manuellt som jag gör nu liksom

Permalänk
Skrivet av MickeBoy:

Om detta stämmer så behöver du ju ta bort den som inparameter. Du använder en lagrad procedur för att stoppa in bilen på en av en parameter angiven plats. Istället ska denna lagrade procedur själv "räkna ut" vilken som är nästa lediga plats. Det gör du i så fall internt i den genom att uföra en fråga innan själva insert-kommandot sker.

Det första steget borde vara att komma fram till en SQL-fråga som tar fram nästa lediga plats.

Så göra om den till en output, likt när man tilldelar en PK? Ja sant, har lite svårt att komma på hur jag skall skriva den frågan bara

Permalänk
Medlem

Lite logiska tankar:

Du behöver ta reda på hur många platser det finns totalt i ditt "parkeringshus", säg 100st.
Sen behöver du ta reda på vilka nummer som är upptagna, tex. 1,2,3 och 4.

Då vet vi att det finns 96 lediga platser och att nummer 1,2,3 och 4 är upptagna.
Första lediga plats är nummer 5 enligt ovan, då skickar du in denna som parameter till din Stored Procedure istället för din hårdkodade siffra ( SpaceNumber = 1 ).Om du helt låter din Stored Procedure sköta logiken och själv räka fram vilken plats som är ledig då kan du ta bort den parametern helt.

Visa signatur

Ryzen 3600 | RX6800

Permalänk
Medlem
Skrivet av PapaDiouf:

Så göra om den till en output, likt när man tilldelar en PK? Ja sant, har lite svårt att komma på hur jag skall skriva den frågan bara

Ja precis, den kommer istället för att vara en inparameter bli en utparameter.

Hur frågan ska se ut beror ju på hur din data är strukturerad, d.v.s hur du lagrar att en plats är upptagen eller inte.

Ett alternativ som jag skulle kunna tänka mig är att ha en tabell med platsnummer och bilnummer/Id. Om det finns 50 platser så kommer den första bilen att hamna på plats 1, den andra bilen på plats 2. Då kommer nästa lediga plats att alltid vara summan av antalet bilar i garaget + 1.

Permalänk
Skrivet av JesperDa:

Lite logiska tankar:

Du behöver ta reda på hur många platser det finns totalt i ditt "parkeringshus", säg 100st.
Sen behöver du ta reda på vilka nummer som är upptagna, tex. 1,2,3 och 4.

Då vet vi att det finns 96 lediga platser och att nummer 1,2,3 och 4 är upptagna.
Första lediga plats är nummer 5 enligt ovan, då skickar du in denna som parameter till din Stored Procedure istället för din hårdkodade siffra ( SpaceNumber = 1 ).Om du helt låter din Stored Procedure sköta logiken och själv räka fram vilken plats som är ledig då kan du ta bort den parametern helt, tex med en SELECT innan du gör INSERT.

Okejokej bra tips. Sitter på denna sp nu, väldigt simpel och säkert inte helt korrekt, hade jag kunnat ha med någon typ av algoritm här som kan räkna ut detta eller behöver jag skapa en ny?

CREATE PROCEDURE spAddVehicle @VehicleType NVARCHAR(10), @VehicleRegNumber NVARCHAR(10), @VehicleArrivalTime DATE, @VehicleID INT OUT, @PSpaceNumber INT, @PSpaceSize INT, @PSpacesRemaining INT, @ParkingSpaceID INT OUT AS BEGIN INSERT INTO Vehicles(VehicleType, VehicleRegNumber, VehicleArrivalTime) VALUES (@VehicleType, @VehicleRegNumber, GETDATE()) SELECT @VehicleID = SCOPE_IDENTITY() BEGIN INSERT INTO ParkingSpace(PSpaceNumber, PSpaceSize, PSpacesRemaining) VALUES (@PSpaceNumber, @PSpaceSize, @PSpacesRemaining) SELECT @ParkingSpaceID = SCOPE_IDENTITY() END END

Permalänk
Medlem
Skrivet av JesperDa:

Lite logiska tankar:

Du behöver ta reda på hur många platser det finns totalt i ditt "parkeringshus", säg 100st.
Sen behöver du ta reda på vilka nummer som är upptagna, tex. 1,2,3 och 4.

Då vet vi att det finns 96 lediga platser och att nummer 1,2,3 och 4 är upptagna.
Första lediga plats är nummer 5 enligt ovan, då skickar du in denna som parameter till din Stored Procedure istället för din hårdkodade siffra ( SpaceNumber = 1 ).Om du helt låter din Stored Procedure sköta logiken och själv räka fram vilken plats som är ledig då kan du ta bort den parametern helt.

Det går ju att låta applikationen själv hålla reda på antalet platser. Det fungerar om det endast finns en klient, men vid flera så kommer det att bli andra problem som man måste ta hand om.

Jag tycker att det är en snyggare lösning att låta databaslagret hantera det.

Permalänk
Medlem
Skrivet av PapaDiouf:

Okejokej bra tips. Sitter på denna sp nu, väldigt simpel och säkert inte helt korrekt, hade jag kunnat ha med någon typ av algoritm här som kan räkna ut detta eller behöver jag skapa en ny?

CREATE PROCEDURE spAddVehicle @VehicleType NVARCHAR(10), @VehicleRegNumber NVARCHAR(10), @VehicleArrivalTime DATE, @VehicleID INT OUT, @PSpaceNumber INT, @PSpaceSize INT, @PSpacesRemaining INT, @ParkingSpaceID INT OUT AS BEGIN INSERT INTO Vehicles(VehicleType, VehicleRegNumber, VehicleArrivalTime) VALUES (@VehicleType, @VehicleRegNumber, GETDATE()) SELECT @VehicleID = SCOPE_IDENTITY() BEGIN INSERT INTO ParkingSpace(PSpaceNumber, PSpaceSize, PSpacesRemaining) VALUES (@PSpaceNumber, @PSpaceSize, @PSpacesRemaining) SELECT @ParkingSpaceID = SCOPE_IDENTITY() END END

Det du vill göra är ju att innan du gör "INSERT INTO ParkingSpace" kolla vilka nästa ledig plats är. Förslaget som @MickeBoy skrev är bra, att du räknar antalet bilar + 1 ( så får du nästa lediga plats ). Du får först bestämma hur stort ditt phus är också.

Visa signatur

Ryzen 3600 | RX6800

Permalänk
Medlem
Skrivet av MickeBoy:

Det går ju att låta applikationen själv hålla reda på antalet platser. Det fungerar om det endast finns en klient, men vid flera så kommer det att bli andra problem som man måste ta hand om.

Jag tycker att det är en snyggare lösning att låta databaslagret hantera det.

Fler och fler går ifrån stored procedures idag. Det är ett rent helvete att underhålla och slutar oftast med att ingen vågar röra databasen längre i rädsla för att förstöra något.

Att det skulle bli en krock vore om två klienter anropar samma parkeringsplats på exakt samma nanosekund, hur ofta sker det?
Innan man parkerar bilen så får man väl kolla om den är ledig via att först kolla den platsen i databasen sen göra sin insert. Jag tycker detta är affärslogik och hör till kodbasen för applikationen. Om man senare byter databas mot en NoSQL så sitter man i skiten då all logik ligger i stored procedures.

Permalänk
Medlem
Skrivet av zaibuf:

Fler och fler går ifrån stored procedures idag. Det är ett rent helvete att underhålla och slutar oftast med att ingen vågar röra databasen längre i rädsla för att förstöra något.

Att det skulle bli en krock vore om två klienter anropar samma parkeringsplats på exakt samma nanosekund, hur ofta sker det?
Innan man parkerar bilen så får man väl kolla om den är ledig via att först kolla den platsen i databasen sen göra sin insert. Jag tycker detta är affärslogik och hör till kodbasen för applikationen. Om man senare byter databas mot en NoSQL så sitter man i skiten då all logik ligger i stored procedures.

Jag håller med, men den lösning som TS nu håller på med utgår ju från lagrade procedurer och då känns det tokigt att blanda ihop det.

Permalänk

Tack för bra tips. Tänkte att jag ska försöka skriva in detta i min stored procedure för denna gången, detta är ingen uppgift eller liknande, utan jag tränar på ett gammalt konsolprogram som vi hade som uppgift, men vi håller på med sql databashantering nu och gissar att liknande saker kommer att komma på tentan, dock med andra uppgifter men stuket blir väl detsamma.
Så i min stored procedure jag skickade innan, före INSERT INTO ParkingSpace bör jag ha något som kollar vad nästa parkeringsplats är?
Måste jag DECLARE något eller kan jag använda min redan befintliga PSpaceNumber?
Sen måste jag väl ha någon typ av IF sats?

IF(PSpaceNumber "Någon operator" "Variabel") BEGIN INSERT INTO ParkingSpace? END

Permalänk
Medlem
Skrivet av PapaDiouf:

Connection är öppen i min try där den executar kommandon?
Att ett fordon läggs till på en ledig plats utan att jag behöver ange den manuellt som jag gör nu liksom

Det ligger ju I din stored procedure att lösa.

Permalänk
Skrivet av Mordekai:

Det ligger ju I din stored procedure att lösa.

Absolut, men skriver till er för jag inte har någon aning om hur det skall skrivas i sql ^^

Permalänk
Medlem

Byt till en riktig ORM, typ Entity Framework, så mycket enklare då.

Visa signatur

Dator: Intel Core 2 Duo E6750@3.2Ghz 2 GB DDR2 6400, 320GB HD, ATI HD3850 256MB, 22" Mirai TFT.
Laptop: Lenovo S10E.

Permalänk
Skrivet av Peter233:

Byt till en riktig ORM, typ Entity Framework, så mycket enklare då.

Hade gärna gjort det enklare för mig men är med detta vi får betyg senare så får fortsätta med det, dock tar jag gärna emot tips på hur jag kan gå till väga för att kolla om nästa p plats är ledig ^^

Permalänk
Medlem

Nu har jag inte verifierat detta, men någonting i denna stilen borde fungera:

DECLARE @NextSpace INT SET @NextSpace = (SELECT COUNT (*) FROM ParkingSpace) +1

Permalänk
Skrivet av MickeBoy:

Nu har jag inte verifierat detta, men någonting i denna stilen borde fungera:

DECLARE @NextSpace INT SET @NextSpace = (SELECT COUNT (*) FROM ParkingSpace) +1

Ska testa det. Bör jag ta bort PSpaceNumber från variablarna ovanför? Eller ska den ligga kvar?

CREATE PROCEDURE spAddVehicle @VehicleType NVARCHAR(10), @VehicleRegNumber NVARCHAR(10), @VehicleArrivalTime DATE, @VehicleID INT OUT, @PSpaceNumber INT, //Denna? @PSpaceSize INT, @PSpacesRemaining INT, @ParkingSpaceID INT OUT AS BEGIN INSERT INTO Vehicles(VehicleType, VehicleRegNumber, VehicleArrivalTime) VALUES (@VehicleType, @VehicleRegNumber, GETDATE()) SELECT @VehicleID = SCOPE_IDENTITY() BEGIN DECLARE @NextSpace INT SET @NextSpace = (SELECT COUNT (*) FROM ParkingSpace) +1 //Ligger den rätt här? BEGIN INSERT INTO ParkingSpace(PSpaceNumber, PSpaceSize, PSpacesRemaining) VALUES (@PSpaceNumber, @PSpaceSize, @PSpacesRemaining) //Bör jag ändra något från parametrarna här? SELECT @ParkingSpaceID = SCOPE_IDENTITY() END END END

Skrev lite kommentarer i min sp, får gärna rätta mig när du/ni har tid så testar jag så länge!

Permalänk
Medlem
Skrivet av PapaDiouf:

Ska testa det. Bör jag ta bort PSpaceNumber från variablarna ovanför? Eller ska den ligga kvar?

CREATE PROCEDURE spAddVehicle @VehicleType NVARCHAR(10), @VehicleRegNumber NVARCHAR(10), @VehicleArrivalTime DATE, @VehicleID INT OUT, @PSpaceNumber INT, //Denna? @PSpaceSize INT, @PSpacesRemaining INT, @ParkingSpaceID INT OUT AS BEGIN INSERT INTO Vehicles(VehicleType, VehicleRegNumber, VehicleArrivalTime) VALUES (@VehicleType, @VehicleRegNumber, GETDATE()) SELECT @VehicleID = SCOPE_IDENTITY() BEGIN DECLARE @NextSpace INT SET @NextSpace = (SELECT COUNT (*) FROM ParkingSpace) +1 //Ligger den rätt här? BEGIN INSERT INTO ParkingSpace(PSpaceNumber, PSpaceSize, PSpacesRemaining) VALUES (@PSpaceNumber, @PSpaceSize, @PSpacesRemaining) //Bör jag ändra något från parametrarna här? SELECT @ParkingSpaceID = SCOPE_IDENTITY() END END END

Skrev lite kommentarer i min sp, får gärna rätta mig när du/ni har tid så testar jag så länge!

Min tanke var att

@NextSpace

skulle vara det värde som du skickar in till INSERT INTO ParkingSpace som PSpaceNumber.
Så om du väljer att byta namn på mitt förslag eller enbart återanvänder frågan är upp till dig.

När du håller på och testar, använder du då SQL Server Management Studio eller något annat verktyg? Du borde hitta ett sätt att köra frågor i ett fönster för att få en snabb feedback.

Permalänk
Skrivet av MickeBoy:

Min tanke var att

@NextSpace

skulle vara det värde som du skickar in till INSERT INTO ParkingSpace som PSpaceNumber.
Så om du väljer att byta namn på mitt förslag eller enbart återanvänder frågan är upp till dig.

När du håller på och testar, använder du då SQL Server Management Studio eller något annat verktyg? Du borde hitta ett sätt att köra frågor i ett fönster för att få en snabb feedback.

Jahaa ja då är jag med, tack snälla. Sätter mig och testar lite nu!
Jag kör SSMS, men nu när jag sitter med konsolen så testar jag oftast genom att skriva c# kod och kalla på mina stored procedures, vilket slog mig nu att det måste ju ta betydligt längre än att sitta och inserta de i ssms?

Permalänk

Blir fan galen, får inte till det alls.. Vet inte om jag skriver rätt.. Orkar någon vänlig själ ändra min stored procedure så att den ligger korrekt? Klarar inte detta mer :'((

Permalänk
Skrivet av PapaDiouf:

Blir fan galen, får inte till det alls.. Vet inte om jag skriver rätt.. Orkar någon vänlig själ ändra min stored procedure så att den ligger korrekt? Klarar inte detta mer :'((

Haha glöm mitt sista meddelande helvete de fungera nu, åh äntligen!! Fan va skönt

Permalänk

Sista fråga innan jag ska sluta störa er allihopa ^^
Man kan lägga till en bil och en mc, en pplats har storleken 2, en bil tar upp en hel ruta, medans om man parkerar en mc så tar den enbart upp en ruta, vilket ger plats för en mc till i samma p ruta. Hur hade en sån fråga kunnat se ut?

Permalänk

Har ett table ParkingSpace och ett table Vehicles, Vehicles innehåller en FK_ParkingSpaceID, när jag försöker INSERT till vehicles så får jag felmeddelande "Cannot insert the value null into column 'ParkingSpaceID'".. Vad kan va fel? Har Identity(1,1) på båda mina PK's..

Permalänk
Medlem
Skrivet av PapaDiouf:

Sista fråga innan jag ska sluta störa er allihopa ^^
Man kan lägga till en bil och en mc, en pplats har storleken 2, en bil tar upp en hel ruta, medans om man parkerar en mc så tar den enbart upp en ruta, vilket ger plats för en mc till i samma p ruta. Hur hade en sån fråga kunnat se ut?

För att lösa det så tänker jag att du måste kunna slå upp alla platser där det finns motorcyklar och sedan genom att undersöka dessa platser hitta en plats där det endast finns en sådan på.

Exakt hur det ska göras kommer ju att bero på hur du har strukturerat dina tabeller. För att hjälpa dig behövs mer info.

Permalänk
Medlem
Skrivet av PapaDiouf:

Har ett table ParkingSpace och ett table Vehicles, Vehicles innehåller en FK_ParkingSpaceID, när jag försöker INSERT till vehicles så får jag felmeddelande "Cannot insert the value null into column 'ParkingSpaceID'".. Vad kan va fel? Har Identity(1,1) på båda mina PK's..

Har du ändrat din INSERT från tidigare?

För högre upp så skrev du:

INSERT INTO Vehicles(VehicleType, VehicleRegNumber, VehicleArrivalTime) VALUES (@VehicleType, @VehicleRegNumber, GETDATE())

Detta är/var din insert till Vehicles och där fanns inte 'ParkingSpaceID' med?

Permalänk
Skrivet av MickeBoy:

För att lösa det så tänker jag att du måste kunna slå upp alla platser där det finns motorcyklar och sedan genom att undersöka dessa platser hitta en plats där det endast finns en sådan på.

Exakt hur det ska göras kommer ju att bero på hur du har strukturerat dina tabeller. För att hjälpa dig behövs mer info.

Mina tables ser ut såhär just nu:
ParkingSpace

[ParkingSpaceID] INT IDENTITY (1, 1) NOT NULL, [PSpaceNumber] INT NOT NULL, [PSpaceSize] INT NOT NULL, [PSpacesRemaining] INT NOT NULL, PRIMARY KEY CLUSTERED ([ParkingSpaceID] ASC)

Vehicles

[VehicleID] INT IDENTITY (1, 1) NOT NULL, [VehicleType] NVARCHAR (10) NOT NULL, [VehicleRegNumber] NVARCHAR (10) NOT NULL, [VehicleArrivalTime] DATETIME NOT NULL, [ParkingSpaceID] INT NOT NULL, PRIMARY KEY CLUSTERED ([VehicleID] ASC), CONSTRAINT [FK_ParkingSpaceID] FOREIGN KEY ([ParkingSpaceID]) REFERENCES [dbo].[ParkingSpace] ([ParkingSpaceID])

Min stored procedure ser ut såhär:

CREATE PROCEDURE spAddVehicle @VehicleType NVARCHAR(10), @VehicleRegNumber NVARCHAR(10), @VehicleArrivalTime DATE, @PSpaceSize INT, @PSpacesRemaining INT AS BEGIN INSERT INTO Vehicles(VehicleType , VehicleRegNumber, VehicleArrivalTime) VALUES (@VehicleType, @VehicleRegNumber, GETDATE()) BEGIN DECLARE @PSpaceNumber INT SET @PSpaceNumber = (SELECT COUNT(*) FROM ParkingSpace) + 1 BEGIN INSERT INTO ParkingSpace(PSpaceNumber, PSpaceSize, PSpacesRemaining) VALUES (@PSpaceNumber, @PSpaceSize, @PSpacesRemaining) RETURN @PSpaceNumber END END END

Angående mina inserts så har jag ändrat fram och tillbaka och testat massa olika varianter, bör parkingspaceID ligga inne i parameterna?

Och min C# kod för att kalla på dessa:

using(SqlConnection dbConn = new SqlConnection(connString)) { SqlCommand cmd = new SqlCommand(sp, dbConn); cmd.CommandType = CommandType.StoredProcedure; addVehicle.VehicleType = UserInputHandler.GetVehicleType(); if (addVehicle.VehicleType == "Car") { addVehicle.VehicleRegNumber = UserInputHandler.GetVehicleRegNumberHandler(); addVehicle.VehicleRegNumber = addVehicle.VehicleRegNumber.ToUpper(); cmd.Parameters.AddWithValue("@VehicleType", addVehicle.VehicleType); cmd.Parameters.AddWithValue("@VehicleRegNumber", addVehicle.VehicleRegNumber); cmd.Parameters.AddWithValue("@VehicleArrivalTime", DateTime.Now); //SqlParameter vehicleID = new SqlParameter("@VehicleID", SqlDbType.Int); //vehicleID.Direction = ParameterDirection.Output; //cmd.Parameters.Add(vehicleID); //SqlParameter parkingSpaceID = new SqlParameter("@ParkingSpaceID", SqlDbType.Int); //parkingSpaceID.Direction = ParameterDirection.Output; //cmd.Parameters.Add(parkingSpaceID); SqlParameter pspacenumber = cmd.Parameters.Add("@PSpaceNumber", SqlDbType.Int); pspacenumber.Direction = ParameterDirection.ReturnValue; cmd.Parameters.AddWithValue("@PSpaceSize", 2); cmd.Parameters.AddWithValue("@PSpacesRemaining", 0); try { dbConn.Open(); cmd.ExecuteNonQuery(); TextToUser.PrintVehicleAdded(); } catch (Exception msg) { TextToUser.PrintExceptionMessage(msg); } finally { dbConn.Close(); } }

Kommenterade bort några rader för att testa lite olika varianter bara