Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从C#中的数据库中获取用户名和密码?_C#_.net_Asp.net_Tsql_Sql Injection - Fatal编程技术网

如何从C#中的数据库中获取用户名和密码?

如何从C#中的数据库中获取用户名和密码?,c#,.net,asp.net,tsql,sql-injection,C#,.net,Asp.net,Tsql,Sql Injection,我的btn\u点击事件中有以下代码: 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); SqlD

我的
btn\u点击事件中有以下代码:

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
是其字段。此代码之后,所有值都存储在
读取器
对象中。我想将
username
pwd
存储在单独的变量中

如何实现这一点?

使用SQL参数将值转换为SqlCommands

string userName =  txt4name.Text;
string password =  txt4pwd.Text;

这真的是你想要的吗?只是为了将数据转换成变量?

通常,在访问数据库时,您应该使用类似的方法来消除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())
        ...................
    }
但更现实地说,要存储凭据,您应该使用类似的方法,而不是滚动自己的凭据。

如果您指的是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);

请务必注意有关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);
}

您确实需要使用参数化SQL。
此外,你的问题没有真正意义;您想在单独的变量中输入用户名和密码吗?在您的示例中,它们已经是分开的。如果您无法将它们分配给字符串,我建议您执行以下操作。

您通常可以在MSDN上找到基本用法示例,如。

另一种方法是将读取器结果加载到数据表中,如下所示:

DataTable Result = new DataTable();

Result.Load(reader);
若您的登录表只包含两个唯一的列(用户名和密码),那个么结果只包含一行信息。然后可以从每列中获取列值:

string userName = Result.Rows[0].Field<string>("userName");
string password = Result.Rows[0].Field<string>("pwd");
string userName=Result.Rows[0]。字段(“用户名”);
字符串密码=结果。行[0]。字段(“pwd”);

你能不能给你的问题起一个更具描述性的名字?你能不能写“请”而不是“请”?@Jonik:请不要那么快批评这个家伙。英语可能不是他的第一语言。我们通常喜欢编辑这些问题,帮助人们解决问题。Rich和buyutec击败了我:)唯一的问题是,如果他去使用这个代码,它可能不会返回任何信息,因为我感觉他没有对密码使用任何加密。您所建议的绝对是最佳实践,但添加密码解释可能会有所帮助。@TheTXI:没关系,我不希望他使用该代码。我希望他使用会员资格提供者。+1表示使用SHA1哈希。如果你真的使用了自己的密码,你真的应该使用哈希,而不是在数据库中存储明文密码。你真的不应该提倡这种凭证存储。不提倡,只是告诉。我们不知道这是否会进入实时代码,或者只是为了学习目的而问。@buyutec:通知和教育他仍然是你的责任。我认为我没有责任(:我也不知道提问者是否意识到理想情况,只是为了让问题更清楚而忽略它,或者她没有任何线索。这应该是一个问答网站。如果你想学习最佳实践,你可以简单地问一下。@buyutec:那么你应该得到我的否决票。如果我有你的观点,我会为自己感到羞愧。GIYF type of答案在这里真的不受欢迎。要么帮助他,要么别管它。@Rich B,提供一个指向包含答案的资源的链接怎么会没有帮助?哦,我明白了,你在那里有一个很好的上升/下降投票率。祝你在个人征战中好运。@Constantin:这里只提供一个链接是被看不起的。解释你的答案。做好工作。
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");
    }
}