Как найти лучший способ разоблачения .Объем данных в DLL ?
Привет.
Создание набора данных .NET легко с помощью Visual Studio, но нет никакого способа предоставить доступ к этому объекту из общей библиотеки DLL. Действительно, когда мы используем только один EXE-файл, у нас возникает та же проблема: динамическое изменение строки подключения набора данных, которая является только параметром, не кажется естественным: мы трафикуем значение, написанное чернилами в сборке!? Кроме того, один и тот же набор данных может использоваться для одновременного управления различными базами данных, что противоречит существованию одной переменной usage (connectionstring ресурса проекта).
Поэтому я хотел узнать ваше мнение по этому вопросу, хотя со своей стороны я нашел идею, которая меня не удовлетворяет, потому что я нахожу ее шаткой.
Что я уже пробовал:
Мое текущее решение : поиск и замена каждого "друга" на "public" в файле конструктора наборов данных, чтобы иметь возможность использовать код рефлексии на основе значения TableName, предсказывать Имя объекта TableAdapter, динамически создавать новый экземпляр TableAdapter из реального и передавать соединение в качестве параметра, уже управляемого до этого.
#Region "Dataset" Public Function TableAdapterRoot(_Name As String) As String 'exemple : Dim x As ECI_Data.ESTX_DataSet_2TableAdapters.ARTICLETableAdapter 'racine ECI_Data. Dim szRootObject As String = "ECI_Data." & _type.ToString & "_DataSet" '+ version szRootObject &= "_" & _Version.Major & "TableAdapters." '+ Nom classe szRootObject &= _Name & "TableAdapter" Return szRootObject End Function Public Function ChargerTable(_TableName As String, Optional ByVal Reload As Boolean = False, Optional ByVal clone As Boolean = False) As DataTable Dim _ClassName As String Dim _Adapter As Object Try 'si "rechargement forcé" pas actif et déjà pourvu alors on ne fait rien sinon que de renvoyer ce que l'on a If Not Reload And DataSet.Tables(_TableName).Rows.Count > 0 Then ChargerTable = DataSet.Tables(_TableName) Exit Function End If _ClassName = TableAdapterRoot(_TableName) '_Adapter = System.Activator.CreateInstance("ECI_Data", _ClassName).Unwrap() _Adapter = System.Reflection.Assembly.GetExecutingAssembly.CreateInstance(_ClassName) _Adapter.Connection = _Connexion _Adapter.Transaction = _Transaction Dim dt As DataTable = Nothing If clone Then dt = DataSet.Tables(_TableName).Clone Else dt = DataSet.Tables(_TableName) End If _Adapter.Fill(dt) ChargerTable = dt 'DataSet.Tables(_TableName) _Adapter.dispose() 'End Using Catch ex As Exception MessageErreur("(Table [" & _TableName & "] " & ex.Message) ChargerTable = Nothing End Try End Function #end region
я хотел бы, чтобы у кого-то было лучшее решение, потому что это не решение, чтобы вручную редактировать содержимое конструктора наборов данных после каждого автоматического обновления конструктора наборов данных.