Search code examples
c#sql-serverexceptionstored-proceduresdividebyzeroexception

SQL Server & C# Stored Procedure & Divide by Zero Exception


So first here is my C# code and then comes the stored procedure.

public DataTable GetCourseHighPass(String tmpCourse)
{
    command.Connection = OpenConnection();

    try
    {
        command.CommandText = "exec GetCourseCompletions @tmpCourse = '" + tmpCourse + "'";
        SqlDataAdapter dataAdapter = new SqlDataAdapter(command);
        dataAdapter.Fill(dataTable);
        return dataTable;
    }
    catch (Exception)
    {
        throw new Exception("There are no VG's for this course.");
    }
    finally
    {
        command.Connection.Close();
    }
}

And here is my stored procedure.

create procedure GetCourseCompletions
   @tmpCourse nvarchar(30)
as
   select (count(pnr) * 100 / (select count(pnr) 
                               from HasStudied  
                               where courseCode = @tmpCourse 
                                 and count(pnr) =)) as VGPrecentage 
   from HasStudied 
   where grade >= 5 
     and courseCode = @tmpCourse
go

The problem is that if there are no students with a high pass I will get a divide by zero exception. Looking for suggestions on how to catch this exception so the program does not crash or even better to re-write the stored procedure so it does not get an exception in the first place.

Thank you for your assistance!


Solution

  • Do what Eric said:

        DECLARE @count int
        Set @count = (select count(pnr) from HasStudied where courseCode = @tmpCourse and count(pnr) =...)
        IF @count = 0
        BEGIN
            SELECT 0 as VGPrecentage
        END
        ELSE
        BEGIN
            select (count(pnr)*100 / @count) as VGPrecentage from HasStudied where grade >= 5 and courseCode = @tmpCourse
        END