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;