none
Работа с БД. Общие подходы к реализации. RRS feed

  • Вопрос

  • Здравствуйте.

    Проконсультируйте, пожалуйста, по общим вопросам и подходам к разработке и реализации.

    Начал разрабатывать приложение:

     Среда Visual Studio, язык C#, БД Firebird Embedded (встраиваемая).

    Пока отрабатываю запросы к БД с маленькими объемами данных. Перед  тем как приступить непосредственно к реализации приложения  с реальными данными хотелось бы получить ответы на возникшие в процессе работы вопросы:

    1)      При установке соединения с БД

    OleDbConnection.Open ()

    OleDbConnection.Close ()

    Где открывать и закрывать (в каждом из методов Button.Click, например, непосредственно перед выполнением запросов к БД или один раз открыть при запуске приложения и закрыть один раз перед завершением работы приложения)?

    2)      Преимущества применения OleDbDataAdapter именно для обновления (а НЕ для заполнения DataSet методом OleDbDataAdapter.Fill()) данных с помощью метода OleDbDataAdapter .Update(). Можно ли (без ущерба для производительности или еще чего-то) применять просто OleDbCommand.Execute...()  для выполнения запросов UPDATE, DELETE, INSERT.

    3)      Преимущества применения TableAdapter? Зачем применять TableAdapter если все те же операции с таблицей можно реализовать с помощью OleDbDataAdapter? Если какая-то существенная разница (возможно, это важно с точки зрения производительности или еще чего-нибудь, подскажите, пожалуйста)?

    4)      Как объявить TableAdapter? Пространство имен System.Data (подключено “using System.Data;”) не позволяет объявлять (или этот объект создается только в процессе разработки, а не в процессе выполнения)?

    Заранее спасибо всем ответившим.
    • Перемещено Tagore Bandlamudi 2 октября 2010 г. 22:33 MSDN Forums consolidation (От:Разработка Windows-приложений)
    7 октября 2009 г. 15:59

Ответы

  • 1)       При установке соединения с БД

    OleDbConnection .Open ()

    OleDbConnection .Close ()

    Как правило это делается в отдельном классе, то есть создается класс отвечающий за соединения с бд. В ado.net соединение должно закрываться как можно раньше. То есть каждый раз не надо прописывать закрытия и открытие в событиях кнопок, надо юзать методы класса который отвечает за взаимодействие с бд.

    вот примерчик с  OleDbDataReader :


    OleDbConnection conn ;
    using (conn = new OleDbConnection("тут строка подключения к бд"))
                {
                    conn.Open();
                    OleDbCommand SelectCMD = new OleDbCommand("SELECT * FROM Таблица1", conn);
                    OleDbDataReader rdr = SelectCMD.ExecuteReader();
                    while (rdr.Read())
                    {
                       //выводим данные куда нибудь например в listbox
                      listBox.Items.Add(rdr["Имя"]);
                    }               
                    conn.Close();
                }

    using (.... )  {  } -  гарантирует то, что соединение будет закрыто

    2)       Преимущества применения OleDbDataAdapter именно для обновления (а НЕ для заполнения DataSet методом OleDbDataAdapter .Fill ()) данных с помощью метода OleDbDataAdapter .Update (). Можно ли (без ущерба для производительности или еще чего-то) применять просто OleDbCommand .Execute ...()   для выполнения запросов UPDATE , DELETE , INSERT .

     

    Можно!

    простейший пример:


    public static void ExecuteQuery(string cm1)
            {
             
                using (conn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;" + @"data source = c:\db.mdb"))
                {
                    conn.Open();
                                            
                    OleDbCommand selectCMD = new OleDbCommand("UPDATE Таблица1 SET Имя = ? WHERE Номер=2", conn);

                    selectCMD.CommandText = "UPDATE Таблица1 SET Имя = ? WHERE Номер=2";
                  
                    selectCMD.Parameters.Add("@Имя", OleDbType.Char, 5).Value = cm1;
                  
                    selectCMD.ExecuteNonQuery();

                    Conn.Close();
                }
               
            }

    тут в бд изменяются все имена тех, у кого номер 2
    • Изменено vld1980 7 октября 2009 г. 17:38
    • Изменено I.Vorontsov 7 октября 2009 г. 18:19 Подряд идущие посты
    • Предложено в качестве ответа I.Vorontsov 7 октября 2009 г. 18:22
    • Помечено в качестве ответа atlant83 7 октября 2009 г. 18:46
    7 октября 2009 г. 17:29
  •     В дополнение к стандартным возможностям адаптера обработки данных, адаптеры таблиц предоставляют дополнительные запросы, совместно использующие общую схему со связанной типизированной таблицей данных. Адаптер таблицы загружает возвращенные данные в связанную таблицу данных в приложении или возвращает новые таблицы, уже заполненные данными.

        Электронная документация по адаптеру таблиц с хорошим практическим руководством

        ps vld1980 пишите все одним постом, применяя функцию редактирования.
    • Предложено в качестве ответа I.Vorontsov 7 октября 2009 г. 18:23
    • Помечено в качестве ответа atlant83 7 октября 2009 г. 18:46
    7 октября 2009 г. 18:06

Все ответы

  • 1)       При установке соединения с БД

    OleDbConnection .Open ()

    OleDbConnection .Close ()

    Как правило это делается в отдельном классе, то есть создается класс отвечающий за соединения с бд. В ado.net соединение должно закрываться как можно раньше. То есть каждый раз не надо прописывать закрытия и открытие в событиях кнопок, надо юзать методы класса который отвечает за взаимодействие с бд.

    вот примерчик с  OleDbDataReader :


    OleDbConnection conn ;
    using (conn = new OleDbConnection("тут строка подключения к бд"))
                {
                    conn.Open();
                    OleDbCommand SelectCMD = new OleDbCommand("SELECT * FROM Таблица1", conn);
                    OleDbDataReader rdr = SelectCMD.ExecuteReader();
                    while (rdr.Read())
                    {
                       //выводим данные куда нибудь например в listbox
                      listBox.Items.Add(rdr["Имя"]);
                    }               
                    conn.Close();
                }

    using (.... )  {  } -  гарантирует то, что соединение будет закрыто

    2)       Преимущества применения OleDbDataAdapter именно для обновления (а НЕ для заполнения DataSet методом OleDbDataAdapter .Fill ()) данных с помощью метода OleDbDataAdapter .Update (). Можно ли (без ущерба для производительности или еще чего-то) применять просто OleDbCommand .Execute ...()   для выполнения запросов UPDATE , DELETE , INSERT .

     

    Можно!

    простейший пример:


    public static void ExecuteQuery(string cm1)
            {
             
                using (conn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;" + @"data source = c:\db.mdb"))
                {
                    conn.Open();
                                            
                    OleDbCommand selectCMD = new OleDbCommand("UPDATE Таблица1 SET Имя = ? WHERE Номер=2", conn);

                    selectCMD.CommandText = "UPDATE Таблица1 SET Имя = ? WHERE Номер=2";
                  
                    selectCMD.Parameters.Add("@Имя", OleDbType.Char, 5).Value = cm1;
                  
                    selectCMD.ExecuteNonQuery();

                    Conn.Close();
                }
               
            }

    тут в бд изменяются все имена тех, у кого номер 2
    • Изменено vld1980 7 октября 2009 г. 17:38
    • Изменено I.Vorontsov 7 октября 2009 г. 18:19 Подряд идущие посты
    • Предложено в качестве ответа I.Vorontsov 7 октября 2009 г. 18:22
    • Помечено в качестве ответа atlant83 7 октября 2009 г. 18:46
    7 октября 2009 г. 17:29
  •     В дополнение к стандартным возможностям адаптера обработки данных, адаптеры таблиц предоставляют дополнительные запросы, совместно использующие общую схему со связанной типизированной таблицей данных. Адаптер таблицы загружает возвращенные данные в связанную таблицу данных в приложении или возвращает новые таблицы, уже заполненные данными.

        Электронная документация по адаптеру таблиц с хорошим практическим руководством

        ps vld1980 пишите все одним постом, применяя функцию редактирования.
    • Предложено в качестве ответа I.Vorontsov 7 октября 2009 г. 18:23
    • Помечено в качестве ответа atlant83 7 октября 2009 г. 18:46
    7 октября 2009 г. 18:06