输入字符串错误
本文关键字:错误 字符串 输入 | 更新日期: 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
语句来处理您的SqlConnection
和SqlCommand
类;
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
。