Получение данных sql из [columnnr] в строку для последующей проверки - PullRequest
0 голосов
/ 20 мая 2019

Я создаю небольшое приложение.До сих пор в приложении жестко запрограммированы пользователи-администраторы, но у меня есть готовые столбцы в базе данных sql, чтобы проверить, является ли пользователь администратором или имеет права на редактирование.У меня просто проблемы с получением этой информации из БД.И я хотел бы перейти к возможности динамического изменения пользователей-администраторов.

Вот код из приложения Load

private void FrmMain_Load(object sender, EventArgs e)
    {

        if (labelUser.Text.Contains("JAM") == true)
        {
            btnAdmin.Visible = true;
            btnUpdate.Visible = true;
            btnNew.Visible = true;
        }
        else if (labelUser.Text.Contains("DST") == true)
        {
            btnAdmin.Visible = true;
            btnUpdate.Visible = true;
            btnNew.Visible = true;
        }
        else if (labelUser.Text.Contains("KBW") == true)
        {
            btnAdmin.Visible = true;
            btnUpdate.Visible = true;
            btnNew.Visible = true;
        }
        else if (labelUser.Text.Contains("JDJ") == true)
        {
            btnAdmin.Visible = true;
            btnUpdate.Visible = true;
            btnNew.Visible = true;
        }
        else if (labelUser.Text.Contains("THR") == true)
        {
            btnAdmin.Visible = true;
            btnUpdate.Visible = true;
            btnNew.Visible = true;
        }
        else
        {
            btnAdmin.Visible = false;
            btnUpdate.Visible = false;
            btnNew.Visible = false;
        }

        //SQLconnection string
        string cs = @"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\Database1.mdf";

        //SQLconnection
        SqlConnection con = new SqlConnection(cs);
        con.Open();
        string strCmd = "select * from AvSites";
        SqlCommand cmd = new SqlCommand(strCmd, con);
        SqlDataAdapter da = new SqlDataAdapter(strCmd, con);
        DataSet ds = new DataSet();
        //Fill combobox list with items from the SQL database
        da.Fill(ds);
        combo1.ValueMember = "id";
        combo1.DisplayMember = "siteName";
        combo1.DataSource = ds.Tables[0];
        combo1.Enabled = true;
        this.combo1.SelectedItem = -1;
        this.combo1.SelectedText = "--select--";
        cmd.ExecuteNonQuery();
        con.Close();

        //SQLconnection
        labelUser2.Text = labelUser.Text.ToLower();
        SqlConnection con2 = new SqlConnection(cs);
        con.Open();
        string strCmd2 = "select * from tbl_Login where UserName =  'labelUser2.Text' ";
        SqlCommand cmd2 = new SqlCommand(strCmd2, con);
        SqlDataAdapter da2 = new SqlDataAdapter(strCmd2, con);
        DataSet ds2 = new DataSet();

        using (SqlDataReader rdr = cmd2.ExecuteReader())
        {
            while (rdr.Read())
            {
                string IsAdmin = rdr["IsAdmin"].ToString();
                labelisAdmin.Text = IsAdmin;
            }
        }

        cmd.ExecuteNonQuery();
        con.Close();

    }

Моя первая мысль состояла в том, чтобы определить, какого пользователя, используя мой labelUser, которыйявляется видимой меткой, показывающей пользователя, который в данный момент вошел в систему, взятого непосредственно из базы данных sqld.(причина .ToLower заключается в том, что в базе данных sql есть пользователи во всех небольших случаях).

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

Именно такчасть, которая вызывает у меня проблемы;

//SQLconnection
    labelUser2.Text = labelUser.Text.ToLower();
    SqlConnection con2 = new SqlConnection(cs);
    con.Open();
    string strCmd2 = "select * from tbl_Login where UserName =  'labelUser2.Text' ";
    SqlCommand cmd2 = new SqlCommand(strCmd2, con);
    SqlDataAdapter da2 = new SqlDataAdapter(strCmd2, con);
    DataSet ds2 = new DataSet();

    using (SqlDataReader rdr = cmd2.ExecuteReader())
    {
        while (rdr.Read())
        {
            string IsAdmin = rdr["IsAdmin"].ToString();
            labelisAdmin.Text = IsAdmin;
        }
    }

    cmd.ExecuteNonQuery();
    con.Close();

}

IsAdmin или столбец [3] имеют либо 0 для false, либо 1 для true.но с этим поиском он ничего не возвращает.

1 Ответ

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

Это неправильно

string strCmd2 = "select * from tbl_Login where UserName =  'labelUser2.Text' ";

, потому что вы на самом деле ищете кого-то с именем пользователя labelUser2.Text, а не с тем, что содержится в свойстве text этого ярлыка.

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

string strCmd2 = "select * from tbl_Login where UserName = @un ";
SqlCommand cmd2 = new SqlCommand(strCmd2, con);
cmd2.Parameters.Add("@un", SqlDbType.VarChar).Value = labelUser2.Text
SqlDataAdapter da2 = new SqlDataAdapter(strCmd2, con);

...

Здесь мы помещаем параметр на место, чтобы принять введенное пользователем значениеЗатем мы создаем объект команды и определяем значения параметров из пользовательских элементов управления вводом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...