Использование сохраненных процедур - довольно большой шаг в правильном направлении. К этому я добавлю проверку ввода, которая выглядит так, как будто вы пытаетесь сделать это с библиотекой OWASP ESAPI, но в большинстве случаев ее довольно просто реализовать с помощью регулярных выражений. Вы должны найти множество общедоступных шаблонов для большинства ненадежных данных.
Еще одна вещь, которую вы можете сделать, это применить принцип наименьших привилегий на уровне данных. Подумайте об использовании более чем одной учетной записи SQL и ограничьте доступ ваших учетных записей, используемых общедоступными пользователями, к абсолютно абсолютным минимальным функциям. Вы используете сохраненные процедуры; попытайтесь избежать каких-либо прав чтения или чтения данных, если вы этого еще не сделали.
Подробнее в OWASP Top 10 для разработчиков .NET, часть 1: Инъекция