输入字符串的格式不是正确的c#和asp.net

本文关键字:asp net 字符串 格式 输入 | 更新日期: 2023-09-27 18:20:12

我正在开发一个简单的asp.net登录页面。一个简单的代码,当用户登录时,它使用sql进行验证,并直接指向staff或admin的页面。但是我有这个错误(int.Parse(myReader.ToString())>0)。。。输入字符串的格式不正确我的代码。。

string Connection = "Data Source=(ip);Initial Catalog=..;Persist Security Info=True;User ID=(id);Password=(pass)";
SqlConnection myConn = new SqlConnection(Connection);
SqlCommand SelectCommand = new SqlCommand("select * from tar_login where Username ='" + txtUsername.Text + "' and Password='" + txtPassword.Text + "' and Position='" + ddlPosition.Text + "';", myConn);
myConn.Open();
var myReader = SelectCommand.ExecuteScalar();
myConn.Close();
if (myReader != null)
{
    if (int.Parse(myReader.ToString()) > 0)
    {
        if (ddlPosition.Text == "Admin")
        {
            Response.Redirect("manager.aspx");
        }
    }
}
if (myReader != null)
{
    if (int.Parse(myReader.ToString()) > 0)
    {
        if (ddlPosition.Text == "Staff")
        {
            Response.Redirect("staff.aspx");
        }
    }
}
else
{
    Label1.ForeColor = System.Drawing.Color.Red;
    Label1.Text = "Incorrect. Please try again";
    myConn.Close();
}

.help是asp.net和c#的新手

输入字符串的格式不是正确的c#和asp.net

ExecuteScalar返回一个对象(行)或null
然后尝试ToString。除非只返回一列,即int,否则int.Parse将无法解析它。

你可以试试int.TryParse,但我相信它会返回false。如果在myReader中放置一个断点,会得到什么?这可能会让您/我们更好地了解您正在处理的问题。


编辑:

o_o?!

你有两个条款说:if (myReader != null)。合并它们。

每当您使用DB或任何需要处理的资源时,请使用using,如Saunders建议的那样。

除此之外,你回答了你的问题。如果返回null,则无法将其解析为int

您必须解决数据库问题或查询,然后重试。

您的ExecuteScalar()带来了一个非数字字符(例如"a"),该字符无法转换为整数

在您的代码中似乎没有必要检查>0。

myReader!=null就足够了。

萨米上面所建议的一切看起来都很完美。

尝试此代码

    string Connection = "Data Source=(ip);Initial Catalog=..;Persist Security Info=True;User ID=(id);Password=(pass)";
    SqlConnection myConn = new SqlConnection(Connection);
    SqlCommand SelectCommand = new SqlCommand("select * from tar_login where Username ='" + txtUsername.Text + "' and Password='" + txtPassword.Text + "' and Position='" + ddlPosition.Text + "';", myConn);
    myConn.Open();
    Sqldatareader myReader = SelectCommand.ExecuteReader();
    myConn.Close();
     if (reader.HasRows)
        {
if (ddlPosition.Text == "Admin")
        {
            Response.Redirect("manager.aspx");
        }
else if (ddlPosition.Text == "Staff")
        {
            Response.Redirect("staff.aspx");
        }
    else
    {
        Label1.ForeColor = System.Drawing.Color.Red;
        Label1.Text = "Incorrect. Please try again";
        myConn.Close();
    }