comment modifier dynamiquement la chaîne de connexion dans la source de données d'objet dans asp.net?Comment modifier une chaîne de connexion de manière dynamique dans une source de données d'objet dans asp.net?
0
A
Répondre
4
protected void ObjectDataSource1_ObjectCreated(object sender, ObjectDataSourceEventArgs e)
{
if (e.ObjectInstance != null)
{
SqlConnection conn = new SqlConnection();
conn.ConnectionString = MyConnectionManager.ConnectionString;
e.ObjectInstance.GetType().GetProperty("Connection").SetValue(e.ObjectInstance, conn, null);
}
}
J'espère que cela aide.
1
Je n'ai pas ci-dessus pour travailler, mais ce fait:
if (e.ObjectInstance != null)
{
((ReportPrototype.ReleasedRatingsDataTableAdapters.RatingsViewTableAdapter)e.ObjectInstance).Connection.ConnectionString = ConfigurationManager.ConnectionStrings["RADSDataConnectionString"].ConnectionString;
}
ObjectInstance est l'adaptateur de table qui dans mon cas était le type lié à la ObjectDataSource.
0
est ici une approche qui fonctionnera pour tous les adaptateurs de table générés, en utilisant la réflexion:
void OnObjectDataSourceObjectCreated(object sender, ObjectDataSourceEventArgs e)
{
if (e.ObjectInstance != null)
{
((SqlConnection)e.ObjectInstance.GetType()
.GetProperty("Connection", BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance)
.GetValue(e.ObjectInstance, null)
).ConnectionString = ConfigurationManager.ConnectionStrings["MyConnectionString"].ConnectionString;
}
}
Notez que Microsoft propriété de connexion génère est créé comme interne (sur mon VS 2013), vous devez donc donner BindingFlags .NonPublic à GetProperty.
Et bien sûr, câbler l'événement ObjectCreated d'une façon ou d'une autre:
ObjectDataSource ObjectDataSource1 = new ObjectDataSource();
...
ObjectDataSource1.ObjectCreated += OnObjectDataSourceObjectCreated;
commentaire tardif: Je suis incapable de faire le travail de réponse acceptée, comme je reçois une référence nulle pour les résultats de ' GetProperty ("Connection") ', mais cette technique fonctionne toujours pour moi dans ASP.NET 4. – jbeldock