System.OverflowException:对于 iis 6 中的 Int16 来说值太大或太小

问题描述 投票:0回答:2

我有一个用Visual Studio 2012编写的登录方法。登录的代码是:

public DataSet Login(string UserName, string Password)
{
    DataSet Message = new DataSet();
    Tbl_Users User = new Tbl_Users();
    string ClientIP = Context.Request.ServerVariables["REMOTE_ADDR"];
    DataSet result = User.Login(UserName, Password, ClientIP);
    if (Int16.Parse(result.Tables[0].Rows[0][0].ToString()) < 0)
    {
        DataTable dt = Message.Tables.Add("results");
        dt.Columns.Add("status");
        dt.Columns.Add("results");
        DataRow row = dt.NewRow();
        row[0] = "-1";
        row[1] = ErrorFinder.SQlErrorHandeling(Int32.Parse(result.Tables[0].Rows[0][0].ToString()));
        dt.Rows.Add(row);
    }
    else
        Message = result;
    return Message;
}

当我在视觉工作室中执行它时,一切都很好。但是当我通过 Visual Studio 发布网站并将其放入 Windows 7 IIS 中时,我收到此错误:

System.OverflowException: Value was either too large or too small for an Int16.
at System.Int16.Parse(String s, NumberStyles style, NumberFormatInfo info)
at Service.Login(String UserName, String Password)

我不知道发布的网站有什么问题?

c# asp.net iis visual-studio-2012
2个回答
7
投票

我怀疑

result.Tables[0].Rows[0][0].ToString()
包含 Int16 可以容纳的更大值。所有类型的整数都有不同的存储容量范围:

Int 16 -- (-32768 to +32767)

Int 32 -- (-2,147,483684 to +2,147,483683)

Int 64 -- (-9223372036854775808 to +9223372036854775807)

0
投票

很可能您的开发数据表具有与 Int 16 兼容的较小值。这就是您不会收到错误的原因。将 16 替换为 32。

if (Int16.Parse(result.Tables[0].Rows[0][0].ToString()) < 0)

if (Int32.Parse(result.Tables[0].Rows[0][0].ToString()) < 0)

或者你甚至可以让它变得更简单

if (int.Parse(result.Tables[0].Rows[0][0].ToString()) < 0)
© www.soinside.com 2019 - 2024. All rights reserved.