Odac ORA-00911: недопустимый символ

Я пишу код C#, который подключается к ODAC. Я думаю, что мой запрос не получил ошибок, но я получаю эту ошибку, я не знаю, как ее решить.

Это мой запрос

comm.CommandText = "SELECT * FROM ZAEDBA WHERE USER_ID = '" + login_id + 
                   "' AND APPID = '" + app_id + "' ;"; 

Может кто-нибудь понять, что здесь не так?

2 ответа

Решение

Ваш запрос уязвим для проблемы безопасности под названием SQL-инъекция!

Вы НИКОГДА не должны использовать конкатенацию строк для построения запроса из строк (некоторый SQL, некоторые параметры)... Используйте всегда параметризованные запросы...

Образец кода:

comm.BindByName = true;
comm.CommandText = "SELECT * FROM ZAEDBA WHERE USER_ID = :login_id AND APPID = :app_id";
comm.Parameters.AddWithValue ("login_id", login_id);
comm.Parameters.AddWithValue ("app_id", app_id);

Почему есть ; в вашей команде sql? Попробуй это;

comm.CommandText = "SELECT * FROM ZAEDBA WHERE USER_ID = '" + login_id + "' AND APPID = '" + app_id "';

Кстати, вы всегда должны использовать параметризованные запросы. Это явно открыто для инъекции SQL. Для вашего запроса используйте вот так;

string commandText = "SELECT * FROM ZAEDBA WHERE USER_ID = @login_id " + AND
        + "WHERE APPID  = @app_id;";

command.Parameters.Add("@login_id", SqlDbType.Int);
command.Parameters["@login_id"].Value = login_id;

command.Parameters.Add("@app_id", SqlDbType.Int);
command.Parameters["@app_id"].Value = app_id;
Другие вопросы по тегам