【问题标题】:Getting an ORA-01426: Numeric Overflow in .NET 4.0, C#, using the Oracle DataAccess .dll获取 ORA-01426:.NET 4.0、C# 中的数值溢出,使用 Oracle DataAccess .dll
【发布时间】:2011-07-05 17:41:23
【问题描述】:

我正在尝试使用 Visual Studio 2010、.Net 4、C# 编写一个非常简单的网页。我正在使用 Oracle DataAccess .DLL 并且已经很好地连接到数据库。当我运行这段代码时,我得到了异常“ORA-01426: Numeric Overflow。”我没有做任何计算,我在提交查询之前把整个东西放到了一个字符串中。下面是我的代码示例:

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();

【问题讨论】:

    标签: .net asp.net oracle c#-4.0 ora-01426


    【解决方案1】:

    这不是答案,但您的代码容易受到 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();
            }
         }
    

    【讨论】:

    • 感谢您的提示!我是在 .NET 中使用 Oracle 的新手,所以一旦我完成这项工作,我会考虑实施您的建议。
    【解决方案2】:

    如果 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
    哈夫

    【讨论】:

    • 这成功了!非常感谢,我一直在寻找这个问题的答案,我知道这将归结为我对基本 Oracle/SQL 的无知。
    【解决方案3】:

    strIdNo 对于包含它的类型来说可能太大了。检查以确保它不需要被引用(将其转换为字符串)。还要检查 per_id_no 列的类型以确保它是您期望的类型(并且 strIdNo 可以适合它)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-23
      • 2011-10-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多