мы разрабатываем базу данных для многопользовательской игры. Сервер написан на C # и общается с базой данных Postgres через Npgsql.
Теперь в руководстве показано, как использовать подготовленные операторы:
NpgsqlCommand command = new NpgsqlCommand("select * from tablea where column1 = :column1", conn);
// Now add the parameter to the parameter collection of the command specifying its type.
command.Parameters.Add(new NpgsqlParameter("column1", NpgsqlDbType.Integer);
// Now, prepare the statement.
command.Prepare();
// Now, add a value to it and later execute the command as usual.
command.Parameters[0].Value = 4;
И в нем говорится, что подготовленные операторы действительны только в сеансе базы данных.
У меня сейчас два вопроса:
1.) Признает ли сервер, что эта команда была подготовлена, если я создам новый объект NpgsqlCommand с тем же текстом команды и типами параметров, или мне нужно сохранить объект и просто изменить переменные перед повторным выполнением? В этом примере объект команды располагается после запроса.
2.) Готовые операторы, вероятно, повысят производительность, хотя у нас ТОЛЬКО простые утверждения в этом стиле:
SELECT f1,f2 FROM t1
UPDATE t1 SET f1=1, f2=2
Возможно, что сотни запросов с одинаковым стилем выполняются подряд - в настоящее время для каждого запроса создается новый объект NpgsqlCommand (а также NpgsqlConnection из пула NpgSql).
Спасибо!