Как я могу получить имя пользователя и пароль из моей базы данных в C #? - PullRequest
4 голосов
/ 19 февраля 2009

У меня есть следующий код в моем btn_click событии:

Sqlconnection con = new Sqlconnection("server=.;database=bss;user id=ab;pwd=ab");
con.open();
SqlCommand cmd = new Sqlcommand("select * from login where username='" 
+ txt4name.Text + "' and pwd='" + txt4pwd.Text + "'", con);

SqlDataReader reader = cmd.execute Reader();

Где login - таблица, а username и pwd - ее поля. После этого кода все значения сохраняются в объекте reader. Я хочу хранить username и pwd в отдельных переменных.

Как мне это сделать?

Ответы [ 9 ]

12 голосов
/ 19 февраля 2009

В общем, при доступе к вашей БД вы должны использовать что-то похожее на это, чтобы устранить уязвимости SQL-инъекций:

using (SqlCommand myCommand = new SqlCommand("SELECT * FROM USERS WHERE USERNAME=@username AND PASSWORD=HASHBYTES('SHA1', @password)", myConnection))
    {                    
        myCommand.Parameters.AddWithValue("@username", user);
        myCommand.Parameters.AddWithValue("@password", pass);

        myConnection.Open();
        SqlDataReader myReader = myCommand.ExecuteReader())
        ...................
    }

Но более реалистично для хранения учетных данных вы должны использовать что-то вроде Система членства вместо того, чтобы сворачивать свою собственную.

7 голосов
/ 19 февраля 2009

С этим вы рискуете получить SQL-инъекцию. Используйте параметры SQL для значений в SqlCommands.

4 голосов
/ 19 февраля 2009

Если вы имеете в виду переменные c # и хотите получить их из db, просто сделайте это:

SqlDataReader reader = cmd.execute Reader();
if (reader.Read())
{
    string username = reader["username"];
    string pwd = reader["password"];
}

Пока вы это делаете, параметризуйте свой запрос и предотвратите внедрение SQL:

SqlCommand cmd = new Sqlcommand("select * from login where username=@username and pwd=@pwd", con);
cmd.Parameters.AddWithValue("@username", txt4name.Text);
cmd.Parameters.AddWithValue("@pwd", txt4pwd.Text);
2 голосов
/ 19 февраля 2009

Обязательно прислушайтесь к совету по внедрению SQL, но вот ответ на ваш вопрос:

String username;
String pwd;

int columnIndex = reader.GetOrdinal("username");

if (!dataReader.IsDBNull(columnIndex))
{
    username = dataReader.GetString(columnIndex);
}

columnIndex = reader.GetOrdinal("pwd");

if (!dataReader.IsDBNull(columnIndex))
{
    pwd = dataReader.GetString(columnIndex);
}
0 голосов
/ 24 февраля 2015
private void but_login_Click(object sender, EventArgs e)
{
    string cn = "Data Source=.;Initial Catalog=mvrdatabase;Integrated Security=True";
    SqlConnection con = new SqlConnection(cn);
    con.Open();
    SqlCommand cmd = new SqlCommand("select count (*) from logintable where username ='" + txt_uname.Text + "'and password='" + txt_pass.Text + "'", con);
    int i = Convert.ToInt32(cmd.ExecuteScalar());
    con.Close();

    if (i == 1)
    {
        Form2 f2 = new Form2();
        MessageBox.Show("User login successfully........");
        this.Hide();
        f2.Show();
    }
    else
    {
        MessageBox.Show("INCORRECT USERID AND PASSWORD", "Error");
    }
}
0 голосов
/ 19 февраля 2009

Другой подход заключается в загрузке результатов считывания в DataTable следующим образом:

DataTable Result = new DataTable();

Result.Load(reader);

Если ваша таблица входа в систему содержит только два уникальных столбца (имя пользователя и пароль), в результате вы получите результат, содержащий только одну строку с информацией. Затем вы можете получить значения столбцов из каждого столбца:

string userName = Result.Rows[0].Field<string>("userName");
string password = Result.Rows[0].Field<string>("pwd");
0 голосов
/ 19 февраля 2009

Обычно вы можете найти базовые примеры использования в MSDN, например этот для SqlDataReader .

0 голосов
/ 19 февраля 2009

Вам действительно нужно использовать параметризованный SQL. Здесь есть пример Кроме того, ваш вопрос на самом деле не имеет смысла; Вы хотите имя пользователя и пароль в отдельных переменных? они уже разделились в вашем примере. Если вы не можете назначить их для строк, я предлагаю следовать учебникам .

0 голосов
/ 19 февраля 2009
string userName =  txt4name.Text;
string password =  txt4pwd.Text;

Это действительно то, что вы хотите? Просто чтобы получить эти данные в переменные?

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