8 novembre 2010

INFOPATH : ADOQueryConnection

Lors de l'utilisation d'InfoPath Form Services, vous pouvez être amené à vouloir soumettre des données dans une base SQL SERVER.
Malheureusement cela n'est pas possible nativement.
Pour cela, il est possible d'utiliser 2 méthodes pour l'insertion en BD:
  • Via un workflow SharePoint (utilisation de Worflow Foundation par exemple),
  • Dans le formulaire Form Services à l'aide de code personnalisé (C# ou VB.Net).
Si vous souhaitez réaliser ceci dans le code du formulaire, il est possible de se servir d'un fichier de connexion de données (UDCX).
Malheureusement les paramètres de la connexion de données ne sont pas tous supportés par une connexion SQL classique.
Par exemple le paramètre "Provider" précisé dans le fichier UDCX n'est pas toléré lors de la création du SQLConnection.
Il faut donc décomposer la chaine de connexion du fichier UDCX pour se récréer une chaine de connexion valide:

AdoQueryConnection ConnexionsSQL = (AdoQueryConnection)DataConnections["NomDataConnexionBD"];
string strConnexionString = GetConnectionString(ConnexionsSQL);
using (SqlConnection connexion = new SqlConnection(strConnexionString)
{
     ...
}

La fonction "GetConnectionString" est définie de la façon suivante:

private string GetConnectionString(AdoQueryConnection queryConnection)
{
    try
    {
            var password = GetConnectionStringParameter(queryConnection, "Password");
            var user = GetConnectionStringParameter(queryConnection, "User ID");
            var server = GetConnectionStringParameter(queryConnection, "Data Source");
            var db = GetConnectionStringParameter(queryConnection, "Initial Catalog");             
            return string.Format("Server={0};Database={1};User ID={2};Password={3};Trusted_Connection=True;", server, db, user, password);
    }
    catch (Exception ex)
    {
            throw new Exception("Erreur lors de la récupération de la chaine de connexion", ex);
    }
}

Aucun commentaire:

Enregistrer un commentaire