Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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);
        }