我创建了连接到应用程序的登录验证,但现在我遇到了一个问题,即在连接应用程序时说我关闭了连接错误。
我的验证脚本:
SQL:
CREATE TABLE [Login]
(
username varchar(30) CHECK (username is not null AND username <> ''),
email varchar(30),
[password] varchar(50),
UNIQUE (username)
)
INSERT INTO dbo.Login values('admin', 'Email@seznam.cz', HASHBYTES('md5',convert(varchar(50),'root')))
C#:
class LoginValidation : Login
{
public string connection = "Data Source=RADEK-PC\\SQLEXPRESS;Initial Catalog=Evidence;Integrated Security=True;";
public string loginVal, passwordVal;
public LoginValidation(string login, string password)
{
try
{
using (SqlConnection sql = new SqlConnection(connection))
{
sql.Open();
using (SqlCommand selectLogin = new SqlCommand("SELECT * FROM dbo.Login WHERE username = @login", sql))
{
selectLogin.Parameters.Clear();
SqlParameter subjektParam = new SqlParameter("@login", SqlDbType.VarChar, 30);
subjektParam.Value = login;
selectLogin.Parameters.Add(subjektParam);
selectLogin.Prepare();
using (SqlDataReader readerLogin = selectLogin.ExecuteReader())
{
while (readerLogin.Read())
{
if (readerLogin.IsDBNull(0) || readerLogin.IsDBNull(2))
continue;
loginVal = readerLogin.GetString(0);
passwordVal = readerLogin.GetString(2);
}
}
sql.Close();
}
}
}
catch (Exception e)
{
MessageBox.Show("Chyba: " + e);
}
if (login == loginVal && password == passwordVal)
{
Main main = new Main();
main.Show();
}
else
MessageBox.Show("Přihlašovací jméno nebo heslo neni správné");
}
}
输出错误:
e {"A fatal internal error connection."} System.Exception {System.InvalidOperationException}
输入数据:
login - > admin
password - > root
拜托,你能帮我解决这个问题吗?
答案 0 :(得分:1)
问题1:在调用ExecuteNonQuery()
命令时,您需要重新调用select
,这不是必需的。
删除此内容:
selectLogin.ExecuteNonQuery();
问题2:使用||
进行逻辑OR
操作。
试试这个:
if (readerLogin.IsDBNull(0) || readerLogin.IsDBNull(2))
continue;
解决方案2: Hashbytes
不能是decrypted
,因为它们是一个方向。解决问题的唯一方法是散列user password
值并将其与数据库中现有的password value
进行比较。
答案 1 :(得分:0)
使用此
更改您的try块语句 try
{
using (SqlConnection sql = new SqlConnection(connection))
{
sql.Open();
string query = "SELECT * FROM dbo.Login WHERE username = @login";
SqlCommand selectLogin = new SqlCommand(query , sql);
selectLogin.Parameters.Add(new SqlParameter("@login",login));
SqlDataReader readerLogin = selectLogin.ExecuteReader())
while (readerLogin.Read())
{
if (readerLogin.IsDBNull(0) || readerLogin.IsDBNull(2))
continue;
loginVal = readerLogin.GetString(0);
passwordVal = readerLogin.GetString(2);
}
}
}