You need to pass multiple parameters, one for each item in your list.
using (var oraCommand = new OracleCommand(null, con))
{
oraCommand.Parameters.AddWithValue("@studentID", studentID);
var parameterNames = new List<string>(courseIDs.Count);
for (int index = 0; index < courseIDs.Count; index++)
{
string name = "@courseId" + index;
oraCommand.Parameters.AddWithValue(name, courseIDs[index]);
parameterNames.Add(name);
}
oraCommand.CommandText = string.Format("SELECT ... FROM student WHERE studentID = @studentID And courseId In ({0})", string.Join(", ", parameterNames));
...
}
It might be easier to use Dapper:
IEnumerable<Student> students = connection.Query<Student>("SELECT ... FROM student WHERE studentID = @studentID And courseId In (@courseIDs)", new { studentID = 42, courseIDs = new[] { 1, 2, 3 } });
GitHub - StackExchange/Dapper: Dapper - a simple object mapper for .Net[
^]