ORA-00933: SQL-команда неправильно завершила ошибку в C #

1

Привет, Я разрабатываю настольное приложение Windows в С# 4.0, Visual Studio 2010. У меня ниже метод для извлечения данных из таблицы oracle.

private static MemoryStream GetStatement(OracleConnection con, int loginId, string session, string ip, string acNo, string frmDate, string toDate)
{
var memoryStream = new MemoryStream();
using (var oraQuery =new OracleCommand(@"SELECT statement_file from
user_account_statement where login_id=" + loginId +" and session_key='" 
+ session + "' and ipaddress='" + ip + "' and account_number='"
+ acNo + "' and from_date=" + frmDate + " and to_date=" 
+ toDate + " and status='closed'", con))
{
using (var oraQueryResult = oraQuery.ExecuteReader())
if (oraQueryResult != null)
{
while (oraQueryResult.Read())
{
var blob = new Byte[(oraQueryResult.GetBytes(0, 0, null, 0, int.MaxValue))];
oraQueryResult.GetBytes(0, 0, blob, 0, blob.Length);
//updated.
memoryStream.Write(blob, 0, blob.Length);
}
}
}
return memoryStream;
}

при выполнении метода в запросе я получаю ошибку, что ORA-00933: SQL command not properly ended. Я пытался суффикс ; к запросу, но получить ту же ошибку. Может ли кто-нибудь исправить меня, когда я ошибаюсь.

  • 2
    Плохо, плохо, очень плохо ... пожалуйста, используйте параметры вместо конкатенации строки.
  • 2
    Вы всегда должны использовать параметризованные запросы . Этот тип конкатенации строк открыт для атак SQL-инъекций . Как выглядит ваш oraQuery при отладке кода? Эта команда работает на вашем менеджере баз данных? (Я так не думаю, конечно)
Показать ещё 3 комментария
Теги:

1 ответ

0

Ниже код работал для меня с использованием параметризованного запроса. Спасибо вам всем:

private static MemoryStream GetStatement(OracleConnection con, int loginId, string session, string ip, string acNo, DateTime frmDate, DateTime toDate)
    {
        var memoryStream = new MemoryStream();
        using (
            var oraQuery =
                new OracleCommand(
                    @"SELECT statement_file from user_account_statement where login_id=:1 and session_key=:2" +
                        "and ipaddress=:3 and account_number=:4 and from_date=:5 and to_date=:6" +
                        " and status='closed'", con))
        {
            oraQuery.BindByName = true;
            oraQuery.Parameters.Add(":1", OracleDbType.Int32).Value = loginId;
            oraQuery.Parameters.Add(":2", OracleDbType.NVarchar2).Value = session;
            oraQuery.Parameters.Add(":3", OracleDbType.NVarchar2).Value = ip;
            oraQuery.Parameters.Add(":4", OracleDbType.NVarchar2).Value = acNo;
            oraQuery.Parameters.Add(":5", OracleDbType.Date).Value = frmDate;
            oraQuery.Parameters.Add(":6", OracleDbType.Date).Value = toDate;

            using (var oraQueryResult = oraQuery.ExecuteReader())
                if (oraQueryResult != null)
                {
                    while (oraQueryResult.Read())
                    {
                        var blob = new Byte[(oraQueryResult.GetBytes(0, 0, null, 0, int.MaxValue))];
                        oraQueryResult.GetBytes(0, 0, blob, 0, blob.Length);
                        memoryStream.Write(blob, 0, blob.Length);
                    }
                }
        }
        return memoryStream;
    }

Ещё вопросы

Сообщество Overcoder
Наверх
Меню