C # WPF MVVM, как переключаться между несколькими типами соединений с базой данных - PullRequest
0 голосов
/ 03 июня 2019

Я готовлюсь к своему последнему экзамену с C # WPF с использованием MVVM и задаюсь вопросом, каков наилучший способ использования нескольких типов соединений с базой данных для переключения между ними в представлении.

Это включает в себя наличие и т. Д. Oracle, mssql, mysql connections.

Я подумал о двух сценариях, чтобы сделать это:

A) Создать новый экземпляр подключения к базе данных, где он создает новое окно просмотра для отображения, чтобы пользователь могработа.

B) Создайте глобальный список доступа для переключения между соединениями по письменной команде.и т. д. «измените базу данных на xxxx», для текущего представления, которое они отображают.

То, что я ищу, это сценарий B), так что он более гибок для пользователя.Благодаря базе данных соединения уникальны.базы данных, я думаю сделать новый экземпляр пр.соединение как класс, и как-то сохранить его в виде списка неизвестного типа?

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

В настоящее время у меня есть только класс с именем ConnectionString, в котором находятся различные функции. Теперь пришло время разделить его, чтобы он соответствовал результату B).

   public class ConnectionString
   {
    //---------------------------------- constructoren
    public ConnectionString()
    {
        ConnectionActive = false;
    }

    //---------------------------------- Global
    public bool ConnectionActive { get; set; }

    //---------------------------------- MSSQL
    public SqlConnection MSconn { get; set; }
    public string MSDataSource { get; set; }
    public string MSInitialCatalog { get; set; }
    public string MSPersistSecurityInfo { get; set; }
    public string MSUserID { get; set; }
    public string MSUserPassword { get; set; }


    public void MSConnectorConnect(string _MSDataSource, string _MSInitialCatalog, string _MSPersistSecurityInfo, string _MSUserID, string _MSUserPassword)
    {
        MSconn = new SqlConnection(@"Data Source = " + _MSDataSource + "; Initial Catalog = " + _MSInitialCatalog + "; Persist Security Info = " + _MSPersistSecurityInfo + "; User ID = " + _MSUserID + "; Password = " + _MSUserPassword + ";");

        //-- Connectionen
        if (MSconn.State != ConnectionState.Open)
        {
            MSconn.Open();
            MessageBox.Show("Connected to " + MSDataSource, "Data Merge Editor - Database connection",
                MessageBoxButton.OK, MessageBoxImage.Information);
            ConnectionActive = true;
        }
        else
        {
            MSconn.Dispose();
            MSconn.Close();
            MessageBox.Show("Disconnected from " + MSDataSource + " with user " + MSUserID, "Data Merge Editor - Database connection",
                                MessageBoxButton.OK, MessageBoxImage.Information);
            ConnectionActive = false;
        }
    }

    //---------------------- MYSQL
    public MySqlConnection MysqlCon { get; set; }
    public string MysqlConnectionName{ get; set; }
    public string MysqlUserName { get; set; }
    public string MysqlUserPassword { get; set; }
    public string MysqlHostName { get; set; }   

    public void MSysqlConnectorConnect(string _MysqlConnectionName, string _MysqlUserName, string _MysqlUserPassword, string _MysqlHostName)
    {
        MysqlCon = new MySqlConnection(@"Server = " + _MysqlConnectionName + "; user id = " + _MysqlUserName + "; password = " + _MysqlUserPassword + "; database = " + _MysqlHostName + ";");

        //-- Connectionen
        if (MysqlCon.State != ConnectionState.Open)
        {
            MysqlCon.Open();
            MessageBox.Show("Connected to " + MysqlHostName, "Data Merge Editor - Database connection",
                MessageBoxButton.OK, MessageBoxImage.Information);
            ConnectionActive = true;
        }
        else
        {
            MysqlCon.Dispose();
            MysqlCon.Close();
            MessageBox.Show("Disconnected from " + MysqlHostName + " with user " + MysqlUserName, "Data Merge Editor - Database connection",
                                MessageBoxButton.OK, MessageBoxImage.Information);
            ConnectionActive = false;
        }
    }

    public void SQliteConnector()
    {

    }

    public void PostgreSQLConnector()
    {

    }

    public void MsAccessConnector()
    {

    }

    public void OracleConnector()
    {

    }

}

Результатслучай

1 Ответ

0 голосов
/ 03 июня 2019

Рекомендуется, чтобы вы просто не изменяли динамически тип базы данных.

В реальных приложениях вы на самом деле динамически не переключаетесь между Oracle и SQL Server или MySQL.Ваши данные находятся в заданной базе данных, и там они хранятся.Это большая проблема, переходящая на другую, и это потребует портирования данных, персонала, изучающего новые rdbms, и, вполне возможно, переписывания наборов хранимых процедур.

Некоторые пакеты программного обеспечения предназначены для поддержки нескольких разных rdbms, но это единственное решение, которое принимается до установки.

У одного клиента есть сервер sql, и это то, что он хочет использовать.У другого клиента есть Oracle, так что именно это они и планируют использовать.

Конечно, есть исключения.

Клиент может захотеть, чтобы ваша маленькая система была установлена ​​локально, и сократить расходы за счет использования бесплатнойrdbms как sql express.

Часто поддерживаются единственные варианты установки.

При проектировании такой системы обычно стараются свести к минимуму то, что необходимо отключить.

Это не всегда возможно.

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

Другие имеют более сложные требования итенденция, по возможности, заключается в том, чтобы заключать в хранимые процедуры.Таким образом, ваш код может остаться прежним, но у Oracle есть хранимая процедура, которая выполняет специфические для оракула вещи, а в базе данных сервера SQL Server есть хранимая процедура, выполняющая специфические для SQL Server вещи.Это означает написание, тестирование и оптимизацию хранимых процедур для каждого варианта.Что дорого и далеко от идеала.Хотя есть и положительная сторона.Если у компании-клиента есть администратор базы данных, они могут настроить ваши хранимые процедуры для повышения производительности.

...