Здравствуйте! Сегодня: Чт, 22 Окт 2020, Ваш IP: 3.238.62.144 Войти через loginza
 
Вход | Регистрация | Забыли пароль?
Мой Kbyte.Ru
> Список форумов Kbyte.Ru - - Базы данных
+ Создать новую тему Страница: 1
Тема: Классы db.foxtools.ru · +  +    в избранномx1 дата добавления: 15.12.2011 / 12:23
Автор темы:
nemo
nemo
тем: 1 / ответов: 3 / благодарностей: 0 / репутация: 0
ответов: 3
создал(а) тем: 1


Алексей, а не могли бы Вы небольшой пример привести к тексту: "...Тогда целесообразно сделать в классе Users коллекцию Computers..." со статьи "Ведение журнала изменений объектов в .NET Framework". Классы очень удобные для работы, а вот с коллекциями не разберусь. Привязка только по одному ключевому полю ведь. Или я что-то не так понял. С уважением.
Технологии: Visual Basic .NET
 
Ответ # 1 # · +  +  дата добавления: 15.12.2011 / 13:11
Автор ответа:
Алексей Немиро
Алексей Немиро
тем: 534 / ответов: 5130 / благодарностей: 325 / репутация: 211
Чашка Kbyte.Ru>>
Url: aleksey.nemiro.ru
Icq: 261779681
Skype: alekseynemiro
ответов: 5130
создал(а) тем: 534


Коллекции автоматически не создаются, придется добавлять руками.
В главном классе, нужно создать перегрузку методов Load и Save, в котором прописать код сохранения коллекций.
  Public Overloads Sub Load()
    MyBase.Load() ' грузим основные данные 

    'грузим коллекцию
    'допустим коллекция Cities
    Me.Cities = new List(Of City)' инициализация коллекции (Citites - это свойство класса типа new List(Of City), где City - класс представляющий таблицу City)
    'получаем данные
    Using myConn As New SqlConnection(_ConnectionString)
        myConn.Open()
        Dim myCmd As New SqlCommand("SELECT * FROM cities", myConn)
        Dim DA As New SqlDataAdapter(myCmd)
        Dim DT As New DataTable()
        DA.Fill(DT)
        'листаем полученные данные циклом и добавляем в коллекцию
        For Each r As DataRow in DT.Rows
          Me.Cities.Add(New City(r)) 'так лучше
          'но если не выйдет, или будет непонятно, можно и так:
          'Me.Cities.Add(New City(r("id_cities")))  'где id_cities - ключевое поле  (идентификатор, primary key, identity) таблицы cities
        Next
    End Using

    'но лучше грузить сразу все из DataSet, одним запросом (для повышения производительности)
  End Sub

  Public Overloads Sub Save()
    'основные данные
    MyBase.Save()
    'коллекция
    If Me.Cities Is Nothing Then Return ' нету данных
    For Each c As City In Me.Cities
      c.Save()'возможно потребуется установка связи класса коллекции с основным классом (например, если основной класс countries, то видимо нужно будет передать в класс city код страны, прежде чем сохранять город)
    Next
  End Sub
В базовом классе (SqlDataManager) нужно сделать дополнительный метод Load, который будуте принимать одну строку данных (DataRow) и формировать на их основе себя.
    Public Sub Load(r As DataRow)
      For Each p As PropertyInfo In Me.GetType().GetProperties()
        Dim atr As SqlColumnAttribute = GetColumnAttribute(p)
        If atr IsNot Nothing Then
          p.SetValue(Me, r(atr.ColumnName), Nothing)
        End If
      Next
    End Sub
Аналогично, для DataRow, нужно добавить перегрузку в конструктор класса (New).

PS: Приведенные здесь фрагменты кода я на работоспособность не проверял.
 
Ответ # 2 # · +  +  дата добавления: 15.12.2011 / 13:16
Автор ответа:
Алексей Немиро
Алексей Немиро
тем: 534 / ответов: 5130 / благодарностей: 325 / репутация: 211
Чашка Kbyte.Ru>>
Url: aleksey.nemiro.ru
Icq: 261779681
Skype: alekseynemiro
ответов: 5130
создал(а) тем: 534


В статье похоже ссылка на пример битая, если нужно, пример прикреплен к этому сообщению.

+ ObjectsLogExample.zip (54,7 Кб)  
Ответ # 3 # · +  +  дата добавления: 15.12.2011 / 13:22
Автор ответа:
nemo
nemo
тем: 1 / ответов: 3 / благодарностей: 0 / репутация: 0
ответов: 3
создал(а) тем: 1


Спасибо большое за ответ. Буду разбираться.
 
Ответ # 4 # · +  +  дата добавления: 13.12.2013 / 10:43
Автор ответа:
nemo
nemo
тем: 1 / ответов: 3 / благодарностей: 0 / репутация: 0
ответов: 3
создал(а) тем: 1


Алексей, а почему на сайте исчез раздел "db.foxtools.ru"? Такая вещь замечательная! Есть у вас возможность выложить где-нибудь пример по этому классу для Access, то бишь OleDB? Заранее спасибо!
 
Ответ # 5 # · +  +  дата добавления: 13.12.2013 / 12:03
Автор ответа:
Алексей Немиро
Алексей Немиро
тем: 534 / ответов: 5130 / благодарностей: 325 / репутация: 211
Чашка Kbyte.Ru>>
Url: aleksey.nemiro.ru
Icq: 261779681
Skype: alekseynemiro
ответов: 5130
создал(а) тем: 534


К сожалению, этот раздел больше не поддерживается. Возможно, когда-нибудь заменю на оффлайн версию, но её нужно дописать, я пока даже для SQL не дописал. Сложно сказать, когда все это будет сделано...

 
Ответ # 6 # · +  +  дата добавления: 13.12.2013 / 12:16
Автор ответа:
nemo
nemo
тем: 1 / ответов: 3 / благодарностей: 0 / репутация: 0
ответов: 3
создал(а) тем: 1


Печально. Алексей, а примера "ObjectsLogExample.zip" для OleDB у Вас случайно не завалялось? У себя все перерыл - потерялось :(
 
Ответ # 7 # · +  +  дата добавления: 13.12.2013 / 12:29
Автор ответа:
Алексей Немиро
Алексей Немиро
тем: 534 / ответов: 5130 / благодарностей: 325 / репутация: 211
Чашка Kbyte.Ru>>
Url: aleksey.nemiro.ru
Icq: 261779681
Skype: alekseynemiro
ответов: 5130
создал(а) тем: 534


Логирования для OleDB я и не делал никогда. Был только для SQL Server.
 
Страница: 1 + Создать новую тему