Невозможно поместить параметры в определение представления:
CREATE TEMP VIEW mylog AS SELECT * FROM log WHERE user_id = ?; -- WRONG
Параметр должен быть фиксированной константой в SQL перед анализом SQL:
CREATE TEMP VIEW mylog AS SELECT * FROM log WHERE user_id = 1234; -- OK
Если вы это сделаетеэто зависит от вас, чтобы убедиться, что фиксированное значение является безопасным.В случае целого числа это довольно просто, просто приведите переменную как целое число, прежде чем форматировать ее в свой оператор SQL.Простое целое число не может вводить контент, вызывающий внедрение SQL.
int userid = 1234;
string s = String.Format(@"CREATE TEMP VIEW mylog AS
SELECT * FROM log WHERE user_id = {0}", userid);
Если перед синтаксическим анализом отформатировать целочисленное значение как числовой литерал в SQL, это не параметр, и он должен устранить полученную ошибку..
Кроме того, вы можете опустить условия в определении представления и заставить клиента указывать условия при запросе представления:
CREATE TEMP VIEW mylog AS SELECT * FROM log; -- OK
SELECT * FROM mylog WHERE user_id = ?; -- OK