输入字符串错误

本文关键字:错误 字符串 输入 | 更新日期: 2023-09-27 17:58:30

以下是代码:

 string checkuser = "select * from [User] where UserName='" + txtusername.Text + "'";
 SqlCommand com = new SqlCommand(checkuser, con);
 int temp = Convert.ToInt32(com.ExecuteScalar().ToString());
 con.Close();
 if (temp == 1)

问题:

每当我运行以下代码时,都会出现错误,即输入字符串的格式不正确

输入字符串错误

尝试

string checkuser = "select count(*) from [User] where UserName=@UserName";

你的问题是ExecuteScalar返回结果的第一行第一列值,它无法转换为整数

如果您有数字列,例如age,请按照以下操作

string checkuser = "select age from [User] where UserName=@UserName";

您的SQL语句对SQL注入攻击广泛开放,您最好使用参数

string sql= "select count(*) from [User] where UserName = @UserName";
using(SqlConnection con = new SqlConnection(conString))
using(SqlCommand cmd= new SqlCommand(sql, con))
{
   con.Open();
   cmd.Parameters.AddWithValue("@UserName", txtusername.Text);
   int temp = Convert.ToInt32(cmd.ExecuteScalar().ToString());
   if(temp == 1)
   {}
}

ExecuteScalar返回第一行的第一列查询结果。看起来你的com.ExecuteScalar().ToString()不是一个有效的整数,这就是你得到这个错误的原因。

如果你想计算你的查询,你需要使用SELECT COUNT(*)而不是SELECT *

请使用参数化查询。这种字符串串联对SQL注入攻击是开放的。

也可以使用using语句来处理您的SqlConnectionSqlCommand类;

using(SqlConnection con = new SqlConnection(strConnString))
using(SqlCommand com = con.CreateCommand())
{
   string checkuser = "select COUNT(*) from [User] where UserName = @user";
   com.CommandText = checkuser;
   com.Parameters.AddWithValue("@user", txtusername.Text);
   int temp = (int)com.ExecuteScalar();
   if(temp == 1)
   ///
}

此外,您还可以使用ExecuteScalar获取特定列值的第一行,并在查询中指定列,如SELECT columnname from [User]...

您应该返回标量值。但是,在您的查询中,您返回的是与String类型不兼容的result set

因此,按如下方式修改您的查询:

string checkuser = "select count(*) from [User] where UserName='" + txtusername.Text + "'";

上面只返回一个可以放入字符串的single value