public void Login_Request(string username, string password) { //para poder reutilizar a base de dados, caso contrário, ele está sempre a substituir var folder = AppDomain.CurrentDomain.BaseDirectory.Replace("\\bin\\Debug", ""); //construir a ligação ao servidor SQL Server local com o caminho do ficheiro string sqlConnection = "Server=(localdb)\\MSSQLLocalDB;AttachDbFilename=" + folder + "UsersDB.mdf" + ";Trusted_Connection=True;"; //inicializar a ligação ao servidor SqlConnection server = new SqlConnection(sqlConnection); //abrir a ligação server.Open(); //construir a string SQL de insert nas tabelas // para aplicações reais devem usar SQL parameters e não string directas string cmdText = string.Format("SELECT * FROM Users WHERE " + "username = '******'", username); //construir o comando SQL com a ligação ao servidor SqlCommand command = new SqlCommand(cmdText, server); //executar o comando e receber os dados resultantes dessa query SqlDataReader Data = command.ExecuteReader(); if (Data.HasRows) //vereficar se tem resultados, o que significa que há algum registo com aquele username e password { //o login é valido Data.Read(); //lê uma linha dos resultados, este metodo retorna um bool para informar se conseguiu ler ou não if (SecurePasswordHasher.Verify(password, Data["Password"].ToString())) { // Adds player to the game Program.M_Game.Game.AddPlayer(new RealPlayer(Data["Username"].ToString(), Data["Email"].ToString(), password, Data["Name"].ToString(), Data["Surname"].ToString(), Data["Country"].ToString(), Data["Photo"].ToString(), Convert.ToInt32(Data["NumGames"]), Convert.ToInt32(Data["NumWins"]), Convert.ToInt32(Data["NumLeave"]), Convert.ToInt32(Data["NumDefeats"]))); Login_Successful?.Invoke(Data["Name"].ToString(), Data["Surname"].ToString()); server.Close(); return; } } // Close SQL connection server.Close(); Error_Login?.Invoke("The username or password is incorrect!"); }
public bool ChangeDB(string Username, string Name, string Surname, string Password, string Email, string Country) { var hashed_password = SecurePasswordHasher.Hash(Password); var folder = AppDomain.CurrentDomain.BaseDirectory.Replace("\\bin\\Debug", ""); string sqlConnectionString = "Server=(localdb)\\MSSQLLocalDB;AttachDbFilename=" + folder + "UsersDB.mdf" + ";Trusted_Connection=True;"; using (SqlConnection connection = new SqlConnection(sqlConnectionString)) using (SqlCommand command = connection.CreateCommand()) { command.CommandText = "Update Users Set Name=@name, Surname = @surname, Password = @pw, Email = @mail, Country = @country where Username = @user"; command.Parameters.AddWithValue("@name", Name); command.Parameters.AddWithValue("@surname", Surname); command.Parameters.AddWithValue("@pw", hashed_password); command.Parameters.AddWithValue("@mail", Email); command.Parameters.AddWithValue("@country", Country); command.Parameters.AddWithValue("@user", Username); connection.Open(); int resultado = 0; try { resultado = command.ExecuteNonQuery(); } catch (System.Data.SqlClient.SqlException) { Error_Change?.Invoke("Error: Error changing profile!"); connection.Close(); } connection.Close(); if (resultado == 1) // se o resultado for 1, significa que adicionou correctamente o utilizador { return(true); } return(false); } }
public bool AddUserDB(string str1, string str2, string str3, string str4, string str5, string str7, string str9) { // str1 --> Username // str2 --> First Name // str3 --> Last Name // str4 --> Profile Pic Path // str5 --> Password // str7 --> Email // str9 --> Country var hashed_password = SecurePasswordHasher.Hash(str5); //Obtem o caminho fisico para a pasta do código da aplicação //para poder reutilizar a base de dados, caso contrário, ele está sempre a substituir var folder = AppDomain.CurrentDomain.BaseDirectory.Replace("\\bin\\Debug", ""); //construir a ligação ao servidor SQL Server local com o caminho do ficheiro string sqlConnection = "Server=(localdb)\\MSSQLLocalDB;AttachDbFilename=" + folder + "UsersDB.mdf" + ";Trusted_Connection=True;"; //inicializar a ligação ao servidor SqlConnection server = new SqlConnection(sqlConnection); //abrir a ligação server.Open(); //obter o nome do ficheiro string filename = System.IO.Path.GetFileName(str4); //construir a string SQL de insert nas tabelas // para aplicações reais devem usar SQL parameters e não string directas string comando = String.Format("INSERT INTO Users" + "(Username, Name, Surname,Password, Photo, Email, Country) values " + "( '{0}', '{1}', '{2}', '{3}', '{4}', '{5}', '{6}')", str1, str2, str3, hashed_password, filename, str7, str9); //construir o comando SQL com a ligação ao servidor SqlCommand command = new SqlCommand(comando, server); //executar o comando sem expectativa de receber resultados (usar para INSERTS, UPDATES, DELETE) //o metodo devolve o numero de linhas modificadas pela query enviada int resultado = 0; try { resultado = command.ExecuteNonQuery(); } catch (System.Data.SqlClient.SqlException) { Error_SignUp?.Invoke("Error: This username already exists!"); } //fechar sempre a ligação quando deixa de ser necessária server.Close(); if (resultado == 1) // se o resultado for 1, significa que adicionou correctamente o utilizador { //guardar copia do ficheiro na pasta fotos System.IO.File.Copy(str4, "Fotos\\" + filename, true); return(true); } return(false); }