please help me here
the error is : conversion from string "~/ShowImage.ash?ID" to type 'Double' is not valid

My code:

Partial Class Create_staff
    Inherits System.Web.UI.Page

    Protected Sub btnUpload_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnUpload.Click
        Dim connection As SqlConnection = Nothing
        Try
            Dim img As FileUpload = CType(imgUpload, FileUpload)
            Dim imgByte As Byte() = Nothing
            If img.HasFile AndAlso Not img.PostedFile Is Nothing Then
                'To create a PostedFile
                Dim File As HttpPostedFile = imgUpload.PostedFile
                'Create byte Array with file len
                imgByte = New Byte(File.ContentLength - 1) {}
                'force the control to load data in array
                File.InputStream.Read(imgByte, 0, File.ContentLength)
            End If
            ' Insert the employee name and image into db
            Dim conn As String = ConfigurationManager.ConnectionStrings("localConnectionString").ConnectionString
            connection = New SqlConnection(conn)

            connection.Open()
            Dim sql As String = "INSERT INTO StaffData(Title,FirstName,SecondName,Gender,ClassTeaching,PhoneNumber,TeachingLevel,Salary,Passport) VALUES(@Title,@FirstName,@SecondName,@Gender,@ClassTeaching,@PhoneNumber,@TeachingLevel,@Salary,@Passport) SELECT @@IDENTITY"
            Dim cmd As SqlCommand = New SqlCommand(sql, connection)
            cmd.Parameters.AddWithValue("@Title", txtTitle.Text.Trim())
            cmd.Parameters.AddWithValue("@FirstName", txtFirstName.Text.Trim())
            cmd.Parameters.AddWithValue("@SecondName", txtSecondName.Text.Trim())
            cmd.Parameters.AddWithValue("@Gender", txtGender.Text.Trim())
            cmd.Parameters.AddWithValue("@ClassTeaching", txtClassTeaching.Text.Trim())
            cmd.Parameters.AddWithValue("@PhoneNumber", txtPhoneNumber.Text.Trim())
            cmd.Parameters.AddWithValue("@TeachingLevel", txtTeachingLevel.Text.Trim())
            cmd.Parameters.AddWithValue("@Salary", txtSalary.Text.Trim())
            cmd.Parameters.AddWithValue("@Passport", imgByte)
            Dim ID As Integer = Convert.ToInt32(cmd.ExecuteScalar())
            Image1.ImageUrl = "~/ShowImage.ashx?ID=" + ID
            
        Catch
            MessageBox.Show(ErrorToString())

        Finally
            connection.Close()
            lblResult.Text = "You have successfully uploaded a staff record for" + " " + txtTitle.Text.ToString() + " " + txtFirstName.Text.ToString()

        End Try
    End Sub


End Class


public class Handler : IHttpHandler {
    SqlConnection connection = null;
    string conn = ConfigurationManager.ConnectionStrings["localConnectionString"].ConnectionString;
    

    public void ProcessRequest (HttpContext context) 
    {
        int passportregno;
        if (context.Request.QueryString["ID"] != null)
            passportregno = Convert.ToInt32(context.Request.QueryString["ID"]);
        else
            throw new ArgumentException("Incorrect Staff ID!");
        context.Response.ContentType = "image/jpeg";
        Stream strm = DisplayImage(passportregno);
        byte[] buffer = new byte[9096];
        int byteSeq = strm.Read(buffer, 0, 9096);

        while (byteSeq > 0)
        {
            context.Response.OutputStream.Write(buffer, 0, byteSeq);
            byteSeq = strm.Read(buffer, 0, 9096);
        }
        
    }
    public Stream DisplayImage(int passportregno)
    {
        string conn = ConfigurationManager.ConnectionStrings["localConnectionString"].ConnectionString;
        connection = new SqlConnection(conn);
        string sql = "SELECT Passport FROM StaffData WHERE ID = @ID";
        SqlCommand cmd = new SqlCommand(sql, connection);
        cmd.CommandType = CommandType.Text;
        cmd.Parameters.AddWithValue("@ID", passportregno);
        connection.Open();
        object theImg = cmd.ExecuteScalar();
        try
        {
            return new MemoryStream((byte[])theImg);
        }
        catch
        {
            return null;
        }
        finally
        {
            connection.Close();
        }
    } 
 
    public bool IsReusable {
        get {
            return false;
        }
    }

}