13 messaggi dal 19 febbraio 2013
Buona sera a tutti,

ho creato una classe che inserisce in WebConfigurationManager.ConnectionStrings una connection string dinamicamente. Per farlo ho utilizzato la Reflection, in modo da rendere True l'attributo bReadOnly della collection. Il tutto funziona in ambiente di sviluppo, mentre in area di test mi rende il seguente errore:

Attempt by method 'OS.clsConnectionString.AddSQLConnectionStringFromRegistry(System.String, System.String, System.String, System.String, System.String)' to access field 'System.Configuration.ConfigurationElementCollection.bReadOnly' failed.

Qualcuno può aiutarmi?

Grazie in anticipo. Di seguito riporto la classe.




Imports Microsoft.VisualBasic
Imports System
Imports System.Web
Imports System.Web.Configuration
Imports System.Reflection
Imports System.Data
Imports System.IO
Imports System.Data.SqlClient
Imports System.Configuration

Public Class clsConnectionString

Public Enum ConnectionType
SQL = 0
End Enum

Private _sConnName As String
Private _sDBName As String
Private _sDSName As String
Private _sUser As String
Private _sPwd As String


Public Sub New(ByVal ConnectionType As ConnectionType, ByVal NewConnectionName As String, ByVal DataBaseName As String, ByVal DataSourceName As String, ByVal UserId As String, ByVal Password As String)
_sConnName = NewConnectionName
_sDBName = DataBaseName

If ConnectionType = clsConnectionString.ConnectionType.SQL Then
AddSQLConnectionStringFromRegistry(NewConnectionName, DataBaseName, DataSourceName, UserId, Password)
End If

End Sub

Private Sub AddSQLConnectionStringFromRegistry(ByVal NewConnectionName As String, ByVal DataBaseName As String, ByVal DataSourceName As String, ByVal UserId As String, ByVal Password As String)
Try
Dim csSettings As ConnectionStringSettings = ConfigurationManager.ConnectionStrings(NewConnectionName)
If csSettings IsNot Nothing Then Return

csSettings = New ConnectionStringSettings(NewConnectionName, "Data Source=" & DataSourceName & ";Initial Catalog=" & DataBaseName & ";Persist Security Info=True;User ID=" & UserId & ";Password=" & Password, "System.Data.SqlClient")

Dim cssc As ConnectionStringSettingsCollection = WebConfigurationManager.ConnectionStrings
Dim t As Type = cssc.GetType().BaseType ' System.Configuration.ConfigurationElementCollection
Dim fi As FieldInfo = t.GetField("bReadOnly", BindingFlags.Instance Or BindingFlags.NonPublic)
fi.SetValue(cssc, False)

WebConfigurationManager.ConnectionStrings.Add(csSettings)
Catch ex As Exception
IO.File.AppendAllText(HttpContext.Current.Server.MapPath("~") & "Files\Log\GeneralLog.txt", Now & " " & ex.Message & "<br>" & vbCrLf)
End Try

End Sub




End Class
135 messaggi dal 01 febbraio 2017
Sembra un errore di autorizzazioni, o la proprietà è in sola lettura.
Prova ad aggiungere una "New" in questa riga, la colletion potrebbe non essere inizializzata :
Dim cssc As ConnectionStringSettingsCollection = New WebConfigurationManager.ConnectionStrings

Ciao.

UNSTRING identifier-1 id-2 id-3
DELIMITED BY [ALL] OR [ALL] literal-1 lit-2
INTO {id-4 [DELIMITER IN id-5]
[COUNT IN id-6]}
[WITH POINTER id-7]
[TALLYING IN id-8]
[ON OVERFLOW imperative-statement-1]
[NOT ON OVERFLOW imper-2]
[END-UNSTRING]

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.