输入字符串错误

时间:2014-04-16 10:10:47

标签: c# asp.net

以下是代码:

 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)

问题:

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

3 个答案:

答案 0 :(得分:3)

尝试

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)
   {}
}

答案 1 :(得分:1)

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

如果您想统计查询,则需要使用SELECT COUNT(*)代替SELECT *

请使用parameterized queries。这种字符串连接对SQL Injection攻击开放。

同时使用using statement来处理您的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]...

答案 2 :(得分:0)

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

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

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

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