public string AddToDataBase(string regNr, int vehicleType) //metod för att lägga till fordon i databasen { string result = ""; SqlConnection con = new SqlConnection(); SqlCommand cmd = new SqlCommand(); con.ConnectionString = conStr; SqlParameter parRegNr = new SqlParameter //skapar in/ut parametrar till sql kommandot med de mottagna värdena { ParameterName = "@RegNr", SqlDbType = System.Data.SqlDbType.NVarChar, //väljer variabel typ Value = regNr, //sätter värdet på parametern Direction = System.Data.ParameterDirection.Input //sätter vilket håll parametern ska gå }; SqlParameter parVehicleType = new SqlParameter { ParameterName = "@VehicleType", SqlDbType = System.Data.SqlDbType.Int, Value = vehicleType, Direction = System.Data.ParameterDirection.Input }; SqlParameter parParkingSlotOut = new SqlParameter { ParameterName = "@parkingSlotOut", SqlDbType = System.Data.SqlDbType.Int, Direction = System.Data.ParameterDirection.Output }; cmd.Parameters.Add(parVehicleType); //lägger till parametrarna cmd.Parameters.Add(parRegNr); cmd.Parameters.Add(parParkingSlotOut); using (con) { con.Open(); SqlTransaction transaction = con.BeginTransaction(); //startar transaktionen try { //sql kommandot som lägger till fordonet i databasen cmd.CommandText = "DECLARE @firstAvailableSpot int; " + "DECLARE @VehicleID int; " + "IF(@VehicleType = 2) " + "BEGIN " + "SET @firstAvailableSpot = (Select TOP(1) ParkingSpaceID From ParkingSpace WHERE Size = 0) " + "END " + "IF (@VehicleType = 1) " + "BEGIN " + "SET @firstAvailableSpot = (Select TOP(1) ParkingSpaceID From ParkingSpace WHERE Size = 1 OR Size = 0) " + "END " + "INSERT INTO Vehicle(RegNr,VehicleType) " + "VALUES(@RegNr,@vehicleType) " + "SET @VehicleID = (SELECT VehicleID FROM Vehicle WHERE RegNr = @RegNr) " + "INSERT INTO ParkedVehicles(VehicleID,ParkingSpaceID,Size) " + "VALUES(@VehicleID,@firstAvailableSpot,@vehicleType) " + "SET @parkingSlotOut = @firstAvailableSpot "; cmd.Connection = con; cmd.Transaction = transaction; cmd.ExecuteNonQuery(); //utför sql kommandot transaction.Commit(); //gick allt utan fel så färdigställs transaktionen result = regNr + " was parked on " + parParkingSlotOut.Value.ToString(); //skapar en string med ut parametern } catch (Exception x) //fångar möjliga fel { transaction.Rollback(); //återställer transaktionen throw new Exception(x.Message); } } return(result); }
public string MoveVehicle(string regNr, int parkingSlot) //metod för att flytta fordon i databasen { string result = ""; SqlConnection con = new SqlConnection(); SqlCommand cmd = new SqlCommand(); con.ConnectionString = conStr; SqlParameter parRegNr = new SqlParameter //skapar in/ut parametrar till sql kommandot med de mottagna värdena { ParameterName = "@RegNr", SqlDbType = System.Data.SqlDbType.NVarChar, //väljer variabel typ Value = regNr, //sätter värdet på parametern Direction = System.Data.ParameterDirection.Input //sätter vilket håll parametern ska gå }; SqlParameter parParkingSlot = new SqlParameter { ParameterName = "@ParkingSlot", SqlDbType = System.Data.SqlDbType.Int, Value = parkingSlot, Direction = System.Data.ParameterDirection.Input }; SqlParameter parParkingSlotOut = new SqlParameter { ParameterName = "@parkingSlotOut", SqlDbType = System.Data.SqlDbType.Int, Direction = System.Data.ParameterDirection.Output }; cmd.Parameters.Add(parRegNr); //lägger till parametrarna cmd.Parameters.Add(parParkingSlot); cmd.Parameters.Add(parParkingSlotOut); using (con) { con.Open(); SqlTransaction transaction = con.BeginTransaction(); //startar transaktionen try { //sql kommandot flyttar fordonet i databasen cmd.CommandText = "DECLARE @VehicleID int " + "SET @VehicleID = (SELECT VehicleID FROM Vehicle WHERE RegNr = @RegNr) " + "IF(@VehicleID IS NULL) " + "BEGIN " + "RAISERROR('Vehicle not found',18,1) " + "END " + "UPDATE ParkedVehicles " + "SET ParkingSpaceID = @ParkingSlot " + "WHERE VehicleID = @VehicleID " + "SET @parkingSlotOut = @ParkingSlot "; cmd.Connection = con; cmd.Transaction = transaction; cmd.ExecuteNonQuery(); //utför sql kommandot transaction.Commit(); //gick allt utan fel så färdigställs transaktionen result = regNr + " was moved to parking slot " + parParkingSlotOut.Value.ToString(); //skapar en string med ut parametern } catch (Exception x) //fångar möjliga fel { transaction.Rollback(); //återställer transaktionen throw new Exception(x.Message); } } return(result); }