2016-03-07 1 views
0

Я новичок в WPF (и вообще в разработке приложений), и я хочу подключиться к моей базе данных и использовать это соединение для запроса его во всех классах Model. Я написал строку подключения в коде MainWindow заиспользовать одно соединение с базой данных во всех классах

public partial class MainWindow : Window 
{ 
    DBConnection db = new DBConnection(); 

    public MainWindow() 
    { 
     InitializeComponent(); 
     Connect(); 
    } 
    ...etc 

А класс DBConnection выглядит следующим образом

class DBConnection 
{ 
    private OracleConnection connection; 
    private OracleCommand command; 
    private bool autoDisconnect; 


    public void Connect(bool autoDisconnect = true) 
    { 

     this.autoDisconnect = autoDisconnect; 
     try 
     { 
      if (connection == null) 
      { 
       connection = new OracleConnection("CONNECTION DETAILS"); 
      } 
      if (connection.State != ConnectionState.Open) 
      { 
       connection.Open(); 
      } 
     } 
     catch (OracleException ex) 
     { } 
    } 
..... etc 

, но я хочу, чтобы создать соединение и db объект где-то так, что во всех моих модели могут просто вызвать классы DBConnection без необходимости создавать новый объект каждый раз, когда

, например, вот модель

public class Authentication 
{ 
    string username; 
    string password; 

    public static bool Authenticate(string UserName, string Password) 
    { 
     db.SetSQL("SQL STATEMENT HERE"); 
     db.ExecuteTransactions(); 
    } 
...etc 

где SetSQL и ExecuteTransactions являются методы DBConnection класса

Итак, где и как я могу (просто) подключиться к базе данных, так что это будет постоянной на протяжении всего приложения? Его только одно окно с различными UserControls, так что я подумал, что было бы хорошо, чтобы соединить в коде MainWindow за

+2

Неплохая идея. Соединения - это ценный ресурс, который нельзя хранить на протяжении всего срока службы приложения. Это может быть потенциально большой загрузочный слой на стороне вашего сервера. Они должны быть созданы, использованы, удалены как можно скорее. Поиск о пуле соединений для Oracle и вашего провайдера (Microsoft, Oracle или ...) – Steve

+0

Если вы хотите придерживаться своей идеи после комментария @ Steve. Я бы посоветовал вам прочитать о двух вещах: синглтонах (просто на них у них есть конкретные варианты использования) и, что более важно, ключевое слово 'static'. – Sidewinder94

+0

@Steve, я этого не знал! Так что я должен открыть соединение, когда оно должно быть использовано (например, проверка входа в систему) и закрыть его после входа (вошел в систему), а затем снова открыть/закрыть для каждого отдельного действия CRUD? – North

ответ

0

Но держит связь не является хорошим
И разделяя соединение между несколькими запросами не хорошо
Что делать, если вы хотите сделать некоторые параллельные вещи в будущем объединения
Подключения является очень эффективным является рекомендуемым способом
Я знаю, кажется, как много

static private dbConnectionString = "CONNECTION DETAILS"; 

using (OracleConnection connection = new OracleConnection(dbConnectionString)) 
{ 
    try 
    { 
     connection.Open(); 
     using (OracleCommand command = connection.CreateCommand()) 
     { 
      ...... 
      using(OracleDataReader rdr = command.ExecuteReader()) 
      { 
      } 
     } 
    } 
    catch(OracleException ex) 
    { 
    } 
    finally 
    { 
     connection.Close(); 
    } 
} 

или вы можете обернуть, что в классе DBConnection

using (DB Connection dbConnection = new DBConnection()) 
{ 
} 

и вы, как правило, не используют ExecuteTrasaction для только одного оператора SQL

это не хорошая идея

db.SetSQL("SQL STATEMENT HERE"); 

должны использовать parmeterized запросы
Я знаю, вы хотите сделать это просто, но это не
Возможно, вы захотите посмотреть, как структура сущности

+0

Спасибо, вы знаете хороший учебник, который охватывает объединение пулов в wpf? Я не понимаю, если первый кодовый блок является классом сам по себе, или идет в каждой модели, или где запросы идут – North

+0

@North Что нужно понять о пуле? Создавать, открывать, использовать и закрывать. Вы используете первый блок кода в модели, или вы можете обернуть его в DBConnection, как я уже сказал. И, как я уже сказал, вы должны использовать парметеризированные запросы, поэтому общее dbConnection ограничено. Если вы не знаете, куда идут вопросы, я не могу вам помочь. – Paparazzi

0
  1. Я думаю, что лучше всего, чтобы создать новый класс или поместить его в свой класс DBConnection. И в этом классе объявите ваше соединение как статическую публикацию.
  2. Также я бы использовал свойство. что-то вроде этого

    static private DBConnection _db=null; 
    
    static public DBConnection Db 
    { 
        get 
        { 
         if (_db==null) Db=new DBConnection(); //You can also add connection or any initialisation 
         return _db; 
        } 
        set { _db = value; } 
    } 
    

PS В WPF обычно не ставят код в код позади. Весь код в WPF является трактир моделью или ViewModels

 Смежные вопросы

  • Нет связанных вопросов^_^