Параметризованные запросы для создания пользователя, выбрасывающего исключение имени пользователя или роли - PullRequest
0 голосов
/ 22 ноября 2018

Я пытаюсь выполнить запрос CREATE USER для базы данных Oracle 12 с использованием библиотеки Oracle.ManagedDataAccess.Этот запрос отлично работает без использования именованных параметров.Но когда я пытаюсь использовать именованные параметры, похоже, что параметры не передаются в запрос правильно.

Я пытаюсь использовать параметры с помощью следующего кода (Примечание: я использую Oracle.ManagedDataAccess library):

using(OracleConnection con = new OracleConnection(_connectionString)) {
    con.Open();
    using(OracleCommand cmd = con.CreateCommand()) {
        cmd.CommandText = "CREATE USER :username IDENTIFIED BY :password";
        cmd.Parameters.Add("username", "A_TESTUSER");
        cmd.Parameters.Add("password", "A_PASSWORD");
        //cmd.Parameters.Add(":username", "A_TESTUSER"); <- also tried
        //cmd.Parameters.Add(":password", "A_PASSWORD"); <- also tried
        //cmd.Parameters.Add(":username", OracleDbType.Varchar2).Value = "A_TESTUSER"; <- also tried
        //cmd.Parameters.Add(":password", OracleDbType.Varchar2).Value = "A_TESTPASS"; <- also tried
        cmd.ExecuteNonQuery();
    }
}

, что приводит к следующему исключению.

Oracle.ManagedDataAccess.Client.OracleException (0x80004005): ORA-01935: missing user or role name.

Запрос работает, когда я задаю его при выполнении запроса со встроенными данными, подобными этому

cmd.CommandText = "CREATE USER A_TESTUSER IDENTIFIED BY A_PASSWORD";

Я также пытался использовать @ вместо : для указания параметров без успеха.Как передать параметры в запрос?

1 Ответ

0 голосов
/ 22 ноября 2018

Я не думаю, что вы можете использовать параметризованные запросы для CREATE USER, поэтому должно быть

cmd.CommandText = String.Format("CREATE USER {0} IDENTIFIED BY \"{1}\"", "A_TESTUSER", "A_PASSWORD");

Примечание: Хотя это решение работает,это не защищает вас от внедрения SQL.Вы должны сделать необходимые проверки ваших входов в дополнение к этому.

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