Bonjour,

Je viens de créer un CLR avec C# sous VS 2010, ma chaine de connexion doit être créer sous ODBC car il existe certain champ dans la base de données qui sont visible seulement avec ODBC.

Ci-dessous le code de ma CLR :

[
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Microsoft.SqlServer.Server.SqlProcedure]
        public static void Test_CLR()
        {
            using (OdbcConnection conn = new OdbcConnection("DSN=SAGE"))
            {
                OdbcCommand InsertCurrencyCommand = new OdbcCommand();
                InsertCurrencyCommand.CommandText =
                "SELECT * into tab2 FROM F_DOCENTETE";
 
                InsertCurrencyCommand.Connection = conn;
 
                conn.Open();
                InsertCurrencyCommand.ExecuteNonQuery();
                conn.Close();
            }
        }
J'ai généré la DLL du projet et je l'ai ajouter sous SQL Server 2008

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
CREATE ASSEMBLY DSN_CLR from 'C:\Users\plus\Documents\Visual Studio 2010\Projects\DSN_CLR\DSN_CLR\bin\Debug\DSN_CLR.dll' WITH PERMISSION_SET = EXTERNAL_ACCESS;
 
create PROCEDURE Test_CLR
AS
EXTERNAL NAME DSN_CLR.[DSN_CLR.Proc_Iheb].Test_CLR;
En exécution la procédure Test_CLR je reçois toujours le message d'erreur suivant :

Msg 6522, Niveau 16, État 1, Procédure Test_CLR, Ligne 0
Une erreur .NET Framework s'est produite au cours de l'exécution de la routine ou de la fonction d'agrégation définie par l'utilisateur "Test_CLR" :
System.Security.SecurityException: Échec de la demande d'autorisation de type 'System.Data.Odbc.OdbcPermission, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.
System.Security.SecurityException:
à System.Security.CodeAccessSecurityEngine.Check(Object demand, StackCrawlMark& stackMark, Boolean isPermSet)
à System.Security.PermissionSet.Demand()
à System.Data.Common.DbConnectionOptions.DemandPermission()
à System.Data.Odbc.OdbcConnection.PermissionDemand()
à System.Data.Odbc.OdbcConnectionFactory.PermissionDemand(DbConnection outerConnection)
à System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory)
à System.Data.Odbc.OdbcConnection.Open()
à DSN_CLR.Proc_Iheb.Test_CLR()