Basicamente, qualquer lugar em que você esteja concatenando strings para criar sua instrução SQL, especialmente aquela que vem da entrada do usuário, é vulnerável.
Em vez de fazer isso, use parâmetros SQL, que podem ser adicionados à propriedade Parameters do seu comando SQL (
SQLcmd
aqui). Vou mostrar um exemplo com um de seus parâmetros - altere seu texto SQLCommand para:
INSERT INTO dbo.Patients(pIDNo, ...)
VALUES(@pIDNo, ...)
Onde
@pIDNo
é um "espaço reservado" na string para o valor do parâmetro, que é enviado separadamente do comando no Coleção SQLParameters
. Em seguida, você pode adicionar um parâmetro com o mesmo nome desse "espaço reservado" e o valor (ele derivará o tipo do valor fornecido para você).
Aqui está o exemplo de antes:
SQLcmd.Parameters.AddWithValue("@pIDNo", LabelPNumber.Text)