2013-05-22 5 views
1

Я хотел бы иметь возможность получить идентификатор текущего пользователя, зарегистрированного на моем сайте.Как получить UserID из пользовательской таблицы

Дело в том, что я не пытаюсь получить Guid, но User_ID, это поле, которое у меня есть на пользовательской моей табличке под названием Users. В этой таблице у меня есть User_ID, который является PK и UserId, который является FK из таблицы aspnet_Users.

Причина, по которой я хочу это поле, потому что у меня есть таблица. Покупайте каждый раз, когда пользователь LOGGED IN нажимает кнопку, говорящую (Buy), новый экземпляр saleId увеличивается и пользовательский_ID, который его купил. В моей таблице Пользователи User_ID имеют тип int, который начинается с 1, а также увеличивается каждый раз, когда на сайте регистрируется newUser.

Так что легче проверить-пользователя по идентификатору из (1.2.3), что уникальный идентификатор с 30 символов

Что я имею в виду что-то вроде этого:

protected void Button1_Click(object sender, EventArgs e)   
{ 
    string InsertSql = "INSERT INTO [Purchase] (User_ID) VALUES (@User_ID)"; 

      using (Connection) 
      { 

       Connection.Open(); 
       SqlCommand com = new SqlCommand(InsertSql, Connection); 

       com.Paramaters.AddWithValue("@User_ID", ????); 

       com.ExecuteNonQuery(); 
       cn.Close(); 

      } 
} 

Где ???? мне нужно каким-то образом ввести User_ID текущего пользователя, который находится в моей пользовательской таблице Users.

Спасибо за помощь

+0

Вы членство? – RL89

+0

Я так думаю, что вы подразумеваете под этим точно – user2394203

+0

Уважаемый проверяю мою вторую логику с помощью 'ProviderUserKey' .. – Rahul

ответ

0

Если предположить, что, как вы говорите, что использование регистрируется в

Использование User.Identity.Name.

Вы проверяете, если пользователь прошел проверку подлинности с помощью:

User.Identity.IsAuthenticated

Если даст вам имя текущего зарегистрированного пользователя в приложении ASP.NET.

com.Paramaters.AddWithValue("@User_ID", User.Identity.Name); 
+0

да, но когда я это делаю, он говорит, что« Конверсия »не удалась при преобразовании значения nvarchar 'UserName' в тип данных in, потому что User_ID имеет тип int и basacly, я добавляю String, в этом случае имя пользователя – user2394203

+0

. Затем вы должны запросить базу данных, сделать инструкцию select для восстановления USER_ID, имеющего имя пользователя. Может быть? –

+0

Hum ... как я это делаю точно, я не очень хорошо разбираюсь в командах Sql – user2394203

0

Если вы используете Membership то

Получает имя, если проверка подлинности.

if (User.Identity.IsAuthenticated) 
    Label1.Text = HttpContext.Current.User.Identity.Name; 
else 
    Label1.Text = "No user identity available."; 

Если вы хотите, чтобы получить userid затем запустить select запрос как

Select userid from tablename where username = 'pass here username'; 

, запустив этот запрос, вы получите userid и использовать это userid, когда вам нужно.

параметризованном Запрос:

com.Paramaters.AddWithValue("@User_ID", HttpContext.Current.User.Identity.Name); 

и если вы не используете Membership то в момент login получить userid от вашего username и использовать в любом месте вы хотите.

Примечание: убедитесь, что у вас есть уникальный username, иначе он даст вам несколько userid.

Logic 2: Используй ProviderUserKey член MembershipUser объекта, например:

MembershipUser user = Membership.GetUser(); 
string userid = user.ProviderUserKey.ToString(); 

Надеется, что он работает ..

+0

Дело в том, что User_ID имеет тип int, а HttpContext.Current.User.Identity.Name - это имя пользователя, поэтому строка – user2394203

+0

, если у вас есть имя пользователя, тогда зачем вам нужен идентификатор пользователя, вы также может применять логику запросов на основе 'username'. – Rahul

+0

Оцените мою вторую логику с помощью 'ProviderUserKey' ... – Rahul

1

После входа в в приложение, вы должны сохранить идентификатор пользователя в сессию переменная .. так что позже вы можете использовать это напрямую.

Пример: -

//while user logged-in,push userid into session variable:- 

    Session["userid"] = 12; 

    //And later on in oyur page you can use it like :- 

    com.Paramaters.AddWithValue("@User_ID", (int)Session["userid"]); 
+0

Как мне «во время входа в систему», а также каждый пользователь имеет другой сеанс? – user2394203

+0

да .. каждый пользователь будет иметь разный сеанс .. и вы можете делать, когда пользователь заполняет свое имя пользователя и пароль и нажимает кнопку входа в систему, а затем сначала вы аутентифицируете пользователя. Если пользователь действителен, то нажмите userid на сеанс, как я показал выше – Pranav

0

Если я понял правильно, у вас есть собственная таблица Users, с ПК User_ID и колонки UserId, что является FK к столу aspnet_Users.

Вы уже знаете имя пользователя, вошедшего в систему пользователя, так почему бы не просто сделать что-то вроде:

string InsertSql = @" 
    INSERT INTO [Purchase] (User_ID) 
    SELECT U.User_ID FROM Users U 
    INNER JOIN aspnet_Users AU ON U.UserId = AU.UserId 
    WHERE AU.LoweredUserName = LCASE(@UserName) 
    "; 

Ваш параметр @UserName затем имя текущего вошедшего пользователя, который вы уже знаете (HttpContext.Current.User.Name) , и вам не нужно знать User_ID.

+0

Я получил эту ошибку Не могу вставить значение NULL в столбец «User_ID» – user2394203

+0

@ user2394203 - тогда вам нужно отладить инструкцию SQL. Например. есть ли строка в таблице Users со значением NULL для User_ID? – Joe

+0

Нет, нет – user2394203

0

Я, наконец, сделал это, и я перешел к другим вещам, которые мне нужно было делать на моем сайте, поэтому я только что понял это сегодня.

Я просто хочу поблагодарить всех ответов и оставить решение своей проблемы. В основном, что я делал неправильно, была команда Select. Я не очень хорошо разбираюсь в SQL, поэтому я не знал, разместить его xD, но теперь я знаю.

защищены недействительным (отправитель объекта, EventArgs е) Button1_Click

{

MembershipUser usr = Membership.GetUser(HttpContext.Current.User.Identity.Name); 
    Guid usrid = (Guid)usr.ProviderUserKey; 

    String product= DropDownList1.SelectedValue.ToString(); 

    string InsertSql= "INSERT INTO [Purchase] (Product_ID, User_ID) VALUES (@Product_ID,(SELECT User_ID from [Users] where UserId = @UserId))"; 


     using (Connection) 
     { 
      Connection.Open(); 
      SqlCommand com = new SqlCommand(InsertSql, Connection); 

      com.Parameters.AddWithValue("@Product_ID", product); 
      com.Parameters.AddWithValue("@UserId", usrid); 

      com.ExecuteNonQuery(); 
      Connection.Close(); 

     } 

    Response.Redirect("Purchase.aspx"); 
} 

Еще раз, спасибо за терпение и помощь Take Care

Смежные вопросы