4

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テーブルはどこにありusernamepwdはそのフィールドです。このコードの後、すべての値がreaderオブジェクトに格納されます。usernameとをpwd別々の変数に保存したい。

どうすればこれを達成できますか?

4

9 に答える 9

12

一般に、DB にアクセスするときは、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())
        ...................
    }

しかし、資格情報を保存するには、より現実的には、自分で作成するのではなく、メンバーシップ システムのようなものを使用する必要があります。

于 2009-02-19T14:07:11.930 に答える
7

それを使用すると、SQL インジェクションの大きなリスクが発生します。 SqlCommands への値には SQL パラメータを使用します。

于 2009-02-19T14:02:25.560 に答える
4

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);
于 2009-02-19T14:07:38.217 に答える
2

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);
}
于 2009-02-19T14:08:25.903 に答える
0
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");
    }
}
于 2015-02-24T12:26:34.647 に答える
0
string userName =  txt4name.Text;
string password =  txt4pwd.Text;

それは本当にあなたが望むものですか?そのデータを変数に入れるだけですか?

于 2009-02-19T14:06:19.107 に答える
0

パラメータ化された SQL を使用する必要があります。ここに例があります さらに、あなたの質問は本当に意味がありません。ユーザー名とパスワードを別々の変数に入れたいですか?あなたの例では、それらはすでに別々です。それらを文字列に割り当てることができない場合は、いくつかのチュートリアルに従うことをお勧めします。

于 2009-02-19T14:11:23.417 に答える
-3

通常、この SqlDataReader の例のように、MSDN で基本的な使用例を見つけることができます。

于 2009-02-19T14:13:13.490 に答える