Ошибка при создании таблицы из c # - PullRequest
0 голосов
/ 14 мая 2018

Я пытаюсь создать таблицу, используя функции Npgsql и command.Parameters.AddWithValue. Вот следующий код:

Попытка 1:

string databaseName = "MyDatabase";
using (NpgsqlCommand command = new NpgsqlCommand(" CREATE DATABASE :DBNAME ", conn))
{
    command.Parameters.AddWithValue(":DBNAME", "'" + databaseName + "'");
    await command.ExecuteNonQueryAsync();
}

Попытка 2:

string databaseName = "MyDatabase";
using (NpgsqlCommand command = new NpgsqlCommand(" CREATE DATABASE :DBNAME ", conn))
{
    command.Parameters.AddWithValue(":DBNAME", "\"" + databaseName + "\"");
    await command.ExecuteNonQueryAsync();
}

Попытка 3

string databaseName = "MyDatabase";
using (NpgsqlCommand command = new NpgsqlCommand(" CREATE DATABASE :DBNAME ", conn))
{
    command.Parameters.AddWithValue(":DBNAME", databaseName);
    await command.ExecuteNonQueryAsync();
}

Я не могу выполнить этот код из-за ошибки syntax error at or near "$1". Что я делаю неправильно? Я использовал этот синтаксис для запросов выбора, и не было никаких проблем, например ::1015*

using (NpgsqlCommand command = new NpgsqlCommand(" SELECT * FROM \"Students\" WHERE \"Id\" = :Id ", conn))
{
    command.Parameters.AddWithValue(":Id", 1);
    int id = (int)await command.ExecuteScalarAsync();
}

и этот запрос работает отлично. В чем разница?

РЕДАКТИРОВАТЬ: Как я могу создавать базы данных и таблицы, предотвращающие внедрение SQL? Безопасно ли следующее утверждение? format('CREATE DATABASE %1$s', 'MyDatabase')

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...