Я новичок в wpf, и у меня возникли некоторые проблемы с тем, как расшифровать зашифрованные значения в моей БД для просмотра на сетке данных. Я искал решение почти 2 дня и только придумал этот код
//private static String Encrypt(string Text)
//private static String Decrypt(string Text)
private void refresh_datagrid()
{
//create temp directory
var tempdir = Path.GetFullPath(Path.Combine(Path.GetTempPath(),Guid.NewGuid().ToString()));
Directory.CreateDirectory(tempdir);
//create temp db with same table and details same as on original db
SQLiteConnection.CreateFile(tempdir+"tempdb.sqlite;security=true;");
var con1 = new SQLiteConnection("Data
Source="+tempdir+"\\tempdb.sqlite;");
con1.Open();
con1.ChangePassword(defaultpassword);
String sql = "CREATE TABLE acc (nam STRING, pas STRING)";
SQLiteCommand command = new SQLiteCommand(sql, con1);
command.ExecuteNonQuery();
//open a connection to encrypted db
using (var con2 = new SQLiteConnection("DataSource="+db_path+";security=true;"))
{
con2.Open();
con2.ChangePassword(defaultpassword);
SQLiteCommand cmd = con2.CreateCommand();
cmd.CommandText = "SELECT * FROM acc ";
//read encrypted strings to decrypt it then pass them to tempdb
SQLiteDataReader reader;
reader = cmd.ExecuteReader();
while(reader.Read())
{
SQLiteCommand cmdc = con1.CreateCommand();
cmdc.CommandText = "INSERT INTO acc (nam,pas) VALUES (@username ,@password )";
cmdc.Parameters.AddWithValue("@username", Decrypt(reader["nam"].ToString()));
cmdc.Parameters.AddWithValue("@password", Decrypt(reader["pas"].ToString()));
cmdc.ExecuteNonQuery();
}
//view tempdb data on datagrid
SQLiteDataAdapter dataAdapter = new SQLiteDataAdapter(cmd.CommandText, con1);
DataTable dataTable = new DataTable();
dataAdapter.Fill(dataTable);
control.ItemsSource = dataTable.AsDataView();
con1.Close();
con2.Close();
//remove tempdir and tempdb
Directory.Delete(tempdir,true);
}
}
это работает, но это просто упрощенный код.
в моем полном коде у меня есть больше таблиц с 6 более подробной информации и 120 учетных записей
и когда я пытаюсь просмотреть их в своей таблице данных, приложение зависает на 3-4 секунды, я обошел эту проблему с backgroundworker
но все еще не удовлетворен задержкой, мне нужен лучший способ справиться с этим, любая помощь приветствуется.
ps: извините за неправильную грамматику или орфографию EN не мой родной язык