2015-06-05 4 views
1

Я пытаюсь заменить параметры в строке для выполнения в запросе Npgsql.Параметры, которые не заменяются должным образом в NpgsqlCommand

Проблема заключается в том, что при замене параметра по его значению в строке он добавляет лишние круглые скобки, и поэтому запрос возвращает ошибку.

NAME_SCHEMA_DB и NAME_ADMIN_DB строковые константы и ExecuteCommand просто принимает NpgsqlCommand и выполняет его.

Это мой код:

String qdropSchema = @"DROP SCHEMA IF EXISTS @name_schem CASCADE"; 
String qCreateSchema = @"CREATE SCHEMA @name_schem AUTHORIZATION @name_admin"; 


DbCommand commandeDrop = new NpgsqlCommand(qdropSchema); 
commandDrop.Parameters.Add(new NpgsqlParameter("@name_schem", NAME_SCHEMA_DB)); 

DbCommand commandCreate = new NpgsqlCommand(qCreateSchema); 
commandCreate.Parameters.Add(new NpgsqlParameter("@name_schem", NAME_SCHEMA_DB)); 
commandCreate.Parameters.Add(new NpgsqlParameter("@name_admin", NAME_ADMIN_DB)); 


ExecuteCommand(commandDrop); 
ExecuteCommand(commandCreate); 

Это то, что SQL-запрос он пытается выполнить, когда он достигает ExecuteCommand(commandDrop)

DROP SCHEMA IF EXISTS (() 'test_schemaName') CASCADE;

Я не уверен, почему он добавляет дополнительные круглые скобки и одинарные кавычки. Обычно я хочу, чтобы запрос, который он запускал, был

DROP SCHEMA IF EXISTS test_schemaName CASCADE;

+0

Поскольку его строка, система параметров окружает ее в кавычках. Параметры не предназначены для указания таблиц или схем. Является ли имя схемы введенным пользователем? –

ответ

4

параметры SQL, как правило, действительны только для значений (например, значения полей) - не имена полей и имена таблиц и т.д. Несмотря на то, что это раздражает, вы, вероятно, нужно вставлять эти имена непосредственно в SQL.

Вы должны быть очень осторожны делая это, конечно, - в любом месте, что может быть от пользовательского ввода, вы должны использовать белый список той или иной форме.

+1

@chardubs «Когда пользователь получает ответ на свой вопрос Джона Скита, этот пользователь обязан« принять »этот ответ». См. Правила. –