Как в данный момент войти в систему пользователя по его идентификатору с помощью C #? - PullRequest
0 голосов
/ 05 мая 2019

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

  private void button5_Click(object sender, EventArgs e)
    {
        string ID = System.Security.Principal.WindowsIdentity.GetCurrent().Name;
        if (textBox1.Text == "" || textBox1.Text != ID)
        {
            MessageBox.Show("Insert your ID and try again.");
        }
        else
        { 
            try
            {
            String ConnectionString = @"Data Source=.\SQLEXPRESS01;Initial Catalog=Vagtplan;Integrated Security=True";
            SqlConnection myconnection = new SqlConnection(ConnectionString);
            myconnection.Open();
            DateTime primaryKey= Convert.ToDateTime(dataGridView1.SelectedRows[0].Cells[0].Value);
            SqlCommand AddNumberCommand = myconnection.CreateCommand();
            AddNumberCommand.CommandText = "UPDATE dbo.Vagter SET [ansatID] = @ansatID WHERE [Dato] = @dato";
            AddNumberCommand.Parameters.Add("@ansatID", SqlDbType.Int).Value = textBox1.Text;
            AddNumberCommand.Parameters.Add("@dato", SqlDbType.DateTime).Value = primaryKey;
            AddNumberCommand.ExecuteNonQuery();
            myconnection.Close();
            }
            catch (Exception ex)
            {
            MessageBox.Show(ex.Message);
            }
            finally
            {
            MessageBox.Show("Du har valgt vagten.");
            }
        }

Но строка ID = System.Security.Principal.WindowsIdentity.GetCurrent (). Имя не помогает в этом случае. ID также объявляется как тип данных 'int'.

Ожидаемый результат состоит в том, что если в данный момент вошедший в систему пользователь напишет идентификатор другого пользователя в textBox1 и попытается обновить данные в DataGridView, нажав кнопку, то он получит сообщение об ошибке типа «Вы должны использовать свой идентификатор» или что-то в этом роде. вот так.

1 Ответ

0 голосов
/ 05 мая 2019

Поскольку вы используете аутентификацию Windows, вы можете получить текущее имя пользователя, используя SUSER_NAME() функцию SQL, например:

UPDATE Table1 SET Column1 = SUSER_NAME()

Если по какой-либо причине вы хотели быполучить имя пользователя в вашем коде C #, чтобы получить имя пользователя, который запускает приложение, используя Environment.UserName, и его домен, используя Environment.UserDomainName:

var userName = $@"{Environment.UserDomainName}\{Environment.UserName}"

Затем вы можете передать его в качестве параметра в запрос.

...