Получение ORA-01426: Числовое переполнение в .NET 4.0, C # с использованием Oracle DataAccess .dll - PullRequest
1 голос
/ 05 июля 2011

Я пытаюсь написать очень простую веб-страницу, используя Visual Studio 2010, .Net 4, C #.Я использую Oracle DataAccess .DLL и установил соединение с базой данных очень хорошо.Когда я запускаю этот код, я получаю исключение «ORA-01426: Числовое переполнение». Я не выполняю никаких вычислений и помещаю все это в строку перед отправкой запроса. Ниже приведен пример кода:

string sql = "SELECT * from users.training WHERE per_id_no = " + strIdNo;
        OracleCommand cmd = new OracleCommand(sql, conn);
        cmd.CommandType = System.Data.CommandType.Text;

        try
        {
            Label1.Visible = false;
            //Read data from the database
            OracleDataReader dr = cmd.ExecuteReader(); // C#
            dr.Read();

Ответы [ 3 ]

2 голосов
/ 05 июля 2011

Это не ответ, но ваш код уязвим для внедрения SQL. Никогда не включайте параметры непосредственно в оператор SQL. Вместо этого используйте именованные аргументы:

    string sql = "SELECT * from users.training WHERE per_id_no = @id";
    using (var cmd = conn.CreateCommand()) 
    {
        cmd.CommandText = sql;

        //syntax differs between different providers
        cmd.Parameters.Add("id", strIdNo); 

        try
        {
            Label1.Visible = false;
            OracleDataReader dr = cmd.ExecuteReader();
            dr.Read();
        }
     }
1 голос
/ 05 июля 2011

Если per_id_no является типом данных varchar2, вам, вероятно, нужно поместить значение в одинарные кавычки.string sql = "SELECT * from users.training WHERE per_id_no = '" + strIdNo + "'";

Конечно, я полностью согласен с @jgauffin, и в этом случае я думаю, что запрос должен выглядеть следующим образомstring sql = "SELECT * from users.training WHERE per_id_no = '@id'";Но я вполне уверен, что в Oracle параметр должен быть: id, а не @id, который, я считаю, является синтаксисом SQL Server.

В любом случае, HTHХарв

0 голосов
/ 05 июля 2011

strIdNo может быть слишком большим для типа, который его содержит.Убедитесь, что он не нуждается в кавычках (чтобы преобразовать его в строку).Также проверьте тип столбца per_id_no, чтобы убедиться, что это ожидаемый тип (и что strIdNo может в него поместиться).

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