输入字符串的格式不是正确的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#的新手
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();
}