You know how to do queries safe to SQL injection:
cmd.CommandText = "Insert into UserResponses values(@QuestionID,@Answer)";
but you are still using queries subject to SQL injection:
sql = "SELECT ID,Answer FROM [Options] inner join Questions on " + "Questions.QId= Options.QID where Questions.QId=" + QuestionID;
Why ?
Never build an SQL query by concatenating strings. Sooner or later, you will do it with user inputs, and this opens door to a vulnerability named "SQL injection", it is dangerous for your database and error prone.
A single quote in a name and your program crash. If a user input a name like "Brian O'Conner" can crash your app, it is an SQL injection vulnerability, and the crash is the least of the problems, a malicious user input and it is promoted to SQL commands with all credentials.
SQL injection - Wikipedia[
^]
SQL Injection[
^]
SQL Injection Attacks by Example[
^]
PHP: SQL Injection - Manual[
^]
SQL Injection Prevention Cheat Sheet - OWASP[
^]
How can I explain SQL injection without technical jargon? - Information Security Stack Exchange[
^]