#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) — это тип данных