Я пытаюсь создать параметризованный запрос в C# для базы данных SQL-сервера.Можете ли вы использовать SQLParameter в инструкции SQL FROM?
Код:..
query = new StringBuilder("SELECT @fields FROM @tables");
using(SqlConnection connection = new SqlConnection(connection))
{
SqlCommand command = new SqlCommand(query.ToString(), connection);
command.Parameters.AddWithValue("@fields", fields.ToString());
command.Parameters.AddWithValue("@tables", tables.ToString());
try
{
connection.Open();
Int32 rowsAffected = command.ExecuteNonQuery();
Console.WriteLine("RowsAffected: {0}", rowsAffected);
}
catch(Exception ex)
{
Console.WriteLine(ex.Message);
}
}
Странная часть этого терпит неудачу с сообщением «Необходимо объявить переменную таблицы \» @ таблиц \»Тем не менее, как вы можете видеть, это четко определено
Так что мой вопрос:
- вы можете передать параметр, чтобы определить список таблиц в ОТ состояния Мент?
- Если вы можете, почему нет это работает?
В качестве побочного примечания к этим ответам о динамическом SQL. Всегда, всегда, всегда будьте очень осторожны при построении динамического SQL, чтобы избежать инъекции SQL. Когда вы строите SQL на лету, вы открываете себя, поэтому убедитесь, что вы проверяете его либо в своем приложении, либо в самом скрипте SQL. –
@Joe Именно поэтому я пытаюсь параметризовать столько, сколько могу. Предложение Where также будет полностью управляться параметрами - добавьте к этому тот факт, что пользовательский интерфейс не имеет текстовых полей, только флажки и многосегментные списки, я должен быть довольно хорошо охвачен. – morganpdx
Вы не можете доверять select-box input. Злоумышленнику очень просто запускать javascript в форме, которая изменяет значения там, или просто публиковать форму вручную со значениями, которые они хотят, а не тем, что ваша форма должна ограничивать вас. (Предполагается, что это веб-приложение, но эта же концепция применяется, совсем немного иначе, к приложениям Windows). Поэтому убедитесь, что у вас есть еще один уровень защиты в коде сервера. –