Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.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
检查SQL数据库中是否存在表单中引入的用户和密码_Sql_C# 4.0_Visual Studio 2015 - Fatal编程技术网

检查SQL数据库中是否存在表单中引入的用户和密码

检查SQL数据库中是否存在表单中引入的用户和密码,sql,c#-4.0,visual-studio-2015,Sql,C# 4.0,Visual Studio 2015,首先,感谢这个网站的存在,因为到目前为止它已经帮助了我很多 现在我正在制作一个需要用户登录的项目(C#)。配置文件存储在SQL数据库中,我需要检查凭据(用户/密码)是否正确以允许登录 我对SQL了解很少,所以请不要介意我的错误 这个表格运行得很好。不起作用的是对我的数据库进行数据检查。因此,当我按login时,表单调用以下函数: 公共bool ValidacaoLogin(字符串用户,字符串传递) 我有两个表来存储不同的配置文件:BDPerfilTecnico和BDPerfilAssist,因此

首先,感谢这个网站的存在,因为到目前为止它已经帮助了我很多

现在我正在制作一个需要用户登录的项目(C#)。配置文件存储在SQL数据库中,我需要检查凭据(用户/密码)是否正确以允许登录

我对SQL了解很少,所以请不要介意我的错误

这个表格运行得很好。不起作用的是对我的数据库进行数据检查。因此,当我按login时,表单调用以下函数:

公共bool ValidacaoLogin(字符串用户,字符串传递)

我有两个表来存储不同的配置文件:BDPerfilTecnico和BDPerfilAssist,因此我希望我的程序(通过连接)同时检查这两个配置文件,尽管现在我不需要使用BDPerfilAssist,因为我的所有测试配置文件都在BDPerfilTecnico上

帮忙?
提前感谢。

至少,您需要查询中的参数。我希望:

    cmd = new SqlCommand("select * from BDPerfil where NIF = @USER AND PASSWORD = @PASSWORD'", cn);
使用查询的参数可以找到一条好的路径。您只需要在查询本身中使用它们


注意:代码中可能还有其他问题。

返回的结果将在dr变量中,并取决于表中的列。您可能应该列出所需的表列,即用户、密码,而不是*列。然后,您可以使用dr变量通过诸如dr.getString(0)来获取用户和dr.getString(1)来获取密码之类的语句来获取这些值。代码中的查询不会更改变量user和password。此外,文本字符串“@user”和“@password”不会从查询中出现,因此我不知道您为什么要与它们进行比较。相反,你想做一些类似的事情。If(dr.getString(0)==用户)

请加密数据库中的密码。您可以加密用户键入的内容,并将加密密码与加密密码进行比较


祝你好运

“注意:代码中可能还有其他问题。”我敢打赌肯定有。第一次使用SQL。我对此不太了解,所以我很容易犯很多错误。但是谢谢你的快速回复。我会检查它是否按建议工作。编辑-检查后,会出现一个错误,说“关键字“AND”附近的语法不正确。不,我的错误。它现在运行,但仍然不接受凭据。以这种方式检查密码意味着它存储为明文。通常这是不赞成的(说得委婉一点)您只返回具有提供的用户名和密码的行。因此,没有行=未知组合;任何行=成功。无需再次检查该行(如果(“@USER”==USER)等失败)。@Hans Kesting“以这种方式检查密码,意味着它以明文形式存储。通常这是不赞成的(说得委婉些)“我知道。但这是上课用的,我们还没有学过如何加密数据,所以……这就足够了。不过,我不太明白你后来说的话。这意味着我不需要为“@USER”==USER和“@PASSWORD”做布尔运算“==通过?返回行时,您已经知道匹配的用户名和密码。所以你不需要再次检查。和“失败”,因为ifs中的“@USER”或“@PASSWORD”只是简单的字符串,我猜它应该是参数值或列值。这可能就是为什么它“仍然无法接受凭据”。至于明文密码:对于一个可以的类赋值,只要你知道“在现实生活中”它必须被散列。我想你的意思更接近这一点:它仍然给我一个错误:“对象引用未设置为对象的实例”。
code
cn.Open(); cmd=new-SqlCommand(“从BDPerfil左侧选择*在BDPerfil.USER=BDPerfilTecnico.USER上加入BDPerfilTecnico,其中BDPerfil.USER=@USER;”,cn);cmd=新的SqlCommand(“选择NIF,来自BDPerfil的密码”,cn);dr.GetString(0);GetString博士(1);dr=cmd.ExecuteReader();if(dr.HasRows){while(dr.Read()){if(dr.GetString(0)=用户&&dr.GetString(1)=通过)返回true;
    cmd = new SqlCommand("select * from BDPerfil where NIF = @USER AND PASSWORD = @PASSWORD'", cn);