2009-07-29 3 views
1

Я хочу, чтобы указать имя таблицы для запроса в качестве параметров команды, например, так:Как я могу предоставить имя таблицы для запроса в качестве параметра команды в Npgsql?

public class Foo 
{ 
    private const String myTableName = "mytable"; 

    public void Bar() 
    { 
     NpgsqlCommand command = new NpgsqlCommand("SELECT * from :tableName", connection); 
     command.Parameters.Add(new NpgsqlParameter("tableName", DbType.String)); 
     command.Parameters[0].Value = myTableName; 
    } 
} 

Это, кажется, в результате этого запроса: "SELECT * from E'mytable'", что приводит к ошибке (ум одинарные кавычки).

Нужно ли мне выполнять конкатенацию строк для этого? Это не имеет значения с точки зрения безопасности, так как имя таблицы не может быть изменено пользователем, но конкатенации для создания запросов SQL всегда дает мне ползает ...

Спасибо, Eric

ответ

3

имена таблиц не могут быть отправлены как параметры. Названия таблиц разрешаются во время разбора, поскольку они необходимы для планирования и таких вещей. Параметры заменяются только при выполнении исполнителем (или при необходимости оптимизатора) времени.

Итак, вам нужно будет использовать замену строки. Разумеется, это не проблема безопасности (или даже риск стать одной), если имя таблицы исходит от константы в вашем классе.

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

+0

Имена таблиц всегда постоянные. Благодарю. – EricSchaefer

 Смежные вопросы

  • Нет связанных вопросов^_^