Сохраните детали конфигурации базы данных в C # WPF - PullRequest
0 голосов
/ 11 декабря 2018

Я создаю приложение, первое окно которого является окном конфигурации базы данных.В этом окне пользователь вводит подробную информацию о сервере и выбирает базу данных, которую он хочет использовать, для которой информация о соединении с базой данных и переносится в окно входа в систему и открывание окна.

Вход в систему и последующие окна используют базу данныхдетали для их строки подключения sql.

Мой вопрос здесь такой: как я могу сохранить эти детали подключения из окна конфигурации, чтобы пользователь обошел этот экран, если он уже установил предыдущее соединение?У меня есть идея сохранить эти данные в файле и установить логическое условие в App.xaml.cs, но я не знаю, как это сделать.

Вот мой код:

Для окна настроек базы данных

DatabaseSettings.xaml.cs

private void btnTest_Click(object sender, RoutedEventArgs e)
    {
        try
        {
            connectionString = "Data Source = " + txtServer.Text + "; User Id = " + txtUserID.Text + "; Password = " + txtPassword.Password + "";
            conn = new SqlConnection(connectionString);
            conn.Open();
            string message = "Connection Successful Please Select a Database to Proceed";
            string caption = "Success!";
            MessageBoxButton buttons = MessageBoxButton.OK;
            MessageBoxImage icon = MessageBoxImage.Information;
            System.Windows.MessageBox.Show(message, caption, buttons, icon);
            txtServer.IsEnabled = false;
            txtUserID.IsEnabled = false;
            txtPassword.IsEnabled = false;
            btnTest.IsEnabled = false;
            cmbdatabase.IsEnabled = true;
            btnConfigure.IsEnabled = true;
            btnConfigure.IsDefault = true;

            sql = "EXEC sp_databases";
            command = new SqlCommand(sql, conn);
            reader = command.ExecuteReader();

            cmbdatabase.Items.Clear();
            while (reader.Read())
            {
                cmbdatabase.Items.Add(reader[0].ToString());
            }
            conn.Close();
        }
        catch(Exception ex)
        {
            System.Windows.MessageBox.Show("Error: " + ex);
        }
    }

    static string Encrypt_Password(string value)
    {
        using (SHA256Managed sha2 = new SHA256Managed())
        {
            UTF8Encoding uTF8 = new UTF8Encoding();
            byte[] data = sha2.ComputeHash(uTF8.GetBytes(value));
            return Convert.ToBase64String(data);
        }
    }



private void btnConfigure_Click(object sender, RoutedEventArgs e)
        {
            try
            {

                string selected = cmbdatabase.Text;
                txtSelectedDBItem.Text = cmbdatabase.Text;
                string EncryptedPassword = Encrypt_Password(txtPassword.Password);
                connectionString = "Data Source = " + txtServer.Text + "; Initial Catalog = " + selected + "; User Id = " + txtUserID.Text + "; Password = " + txtPassword.Password + "";
                conn = new SqlConnection(connectionString);

                sql = "INSERT INTO Proc_Activity_Log ([UserName], [Password], [AccessTime], [MachineSerial]) values(@userId, @password, @accessTime, @machineserial)";
                conn.Open();
                using (SqlCommand cmd = new SqlCommand(sql, conn))
                {
                    cmd.Parameters.AddWithValue("@userID", txtUserID.Text);
                    cmd.Parameters.AddWithValue("@password", EncryptedPassword);
                    cmd.Parameters.AddWithValue("@accessTime", dateTime.Text);
                    cmd.Parameters.AddWithValue("@machineserial", txtMachineSerialNo.Text);
                    cmd.ExecuteNonQuery();                    
                }

                UserInterface.frmLogin loginScreen = new UserInterface.frmLogin(txtUserID.Text, txtPassword.Password, txtServer.Text, txtSelectedDBItem.Text);
                spashScreen.Show();
                this.Close();

            }

            catch (Exception ex)
            {
                System.Windows.MessageBox.Show("Error Here:" + ex.Message);
            }
        }

Для экрана входа в систему

frmLogin.xaml.cs

public frmLogin(string uname, string pwd, string server, string db)
        {
            InitializeComponent();

            txtServerUser.Text = uname;
            txtServerPwd.Password = pwd;
            txtServer.Text = server;
            txtSelectedDBItem.Text = db;
        }

private void btnOk_Click(object sender, EventArgs e)
        {
            SqlConnection sqlCon = new SqlConnection(@"Data Source=" + txtServer.Text + "; Initial Catalog=" + txtSelectedDBItem.Text + "; Integrated Security=True;");

            try
            {
                if (sqlCon.State == ConnectionState.Closed)
                    sqlCon.Open();
                String query = "SELECT COUNT(1) FROM dbo.users WHERE name=@Username and password=@Password";
                SqlCommand sqlCmd = new SqlCommand(query, sqlCon);
                sqlCmd.CommandType = CommandType.Text;
                sqlCmd.Parameters.AddWithValue("@Username", txtLogin.Text);
                sqlCmd.Parameters.AddWithValue("@Password", txtPwd.Password);
                int count = Convert.ToInt32(sqlCmd.ExecuteScalar());
                if (count == 1)
                {
                    frmMDI yourDesktop = new frmMDI(txtLogin.Text, txtServerUser.Text, txtServerPwd.Password, txtServer.Text, txtSelectedDBItem.Text);
                    yourDesktop.Show();
                    this.Close();


                }
                else
                {
                    txtLogin.Text = "admin";
                    txtPwd.Password = "admin";
                    txtLogin.Focus();
                }

            }

            catch (Exception ex)
            {
                string message = "The Following Error Occurred: " + ex.Message;
                string caption = "Invalid Action";
                MessageBoxButton buttons = MessageBoxButton.OK;
                MessageBoxImage icon = MessageBoxImage.Error;
                System.Windows.MessageBox.Show(message, caption, buttons, icon);
            }

            finally
            {
                sqlCon.Close();
            }
        }

Из приведенных ниже снимков экрана можно сделать вывод, какие кнопки представляют события щелчка в приведенном выше коде

Окно настроек базы данных - тестирование соединения

Окно настроек базы данных - тестирование соединения

Окно настроек базы данных - Настройка базы данных

Окно настроек базы данных - Настройка базы данных

И, наконец, окно входа в систему

окно входа

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...