Входная строка была не в правильном формате

#c# #asp.net

#c# #asp.net

Вопрос:

   public int getcid(string UserName)
  {
            SqlConnection con = new SqlConnection(strConnString);
            con.Open();

            int js;

            string query = "select Username from register_tab where Email='"   UserName   "' ";
            sqlda = new SqlDataAdapter(query, con);
            DataSet ds = new DataSet();
            sqlda.Fill(ds);

            js = Convert.ToInt32(ds.Tables[0].Rows[0]["Username"].ToString());

            return (js);
  

введите описание изображения здесь

Комментарии:

1. что такое имя пользователя? строка, int, ваш пользовательский объект?

2. Кроме того, первое , что нужно исправить, это уязвимость вашей атаки SQL-инъекцией. Всегда используйте параметризованные запросы.

3. я получаю имя пользователя с адреса электронной почты при входе в систему ….. и добавляю это имя пользователя в сеанс

4. Вы преобразуете username в int, и оно может содержать некоторое строковое значение

5. имя пользователя — строка

Ответ №1:

Измените свой метод на этот и проверьте его:

 SqlConnection con = new SqlConnection(strConnString);
            con.Open();
string js;
string query= "select Username from register_tab where Email= @username";
SqlCommand cmd = new SqlCommand(query, con);
cmd.Parameters.Add("@username",SqlDbType.VarChar, 50).Value =  
                                           UserName;

using(SqlDataReader reader= cmd.ExecuteReader())
{
    while (reader.Read())
    {
        js=  reader["Username"].ToString();
    }
}

con.Close();
return js;
  

Кроме того, почему вы указываете имя пользователя в столбец Email в своем запросе?
И почему вы используете DataSet, если хотите вернуть только int?

ОБНОВЛЕНИЕ: нет необходимости преобразовывать в int.

Комментарии:

1. md.Parameters.Add(«@Email»,SqlDbType.NVarchar,20).Значение = Имя пользователя;

2. @AliHacter обновлен до этого: cmd.Parameters.Add(«@username»,SqlDbType.NVarchar,20).Значение

3. какой тип данных вашего имени пользователя?

4. Тип данных имени пользователя — string

5. varchar (50) — это тип данных