Bonjour!
Actuellement, je suis sur un projet dans lequel mes outils sont : SQL Server 2005, .Net Framework, Visual Studio 2005, C#.
J’ai vu grâce à la MSDN qu’il était possible de créer un type défini par l’utilisateur, qui sera ensuite utilisé comme un type SQL.
J’ai créé un projet de type « SQL SERVER » ensuite j’ai choisis « type défini par l’utilisateur »
En voici le code :
NB : J’ai ajouté une référence vers un web service qui attaque Active Directory (ce web service me ramène les informations d’un compte)
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
17
18
19
20
21
22
23
24
25
26
27
28
29 using System; using System.Data; using System.Data.SqlClient; using System.Data.SqlTypes; using Microsoft.SqlServer.Server; using System.Security.Permissions; [Serializable] [Microsoft.SqlServer.Server.SqlUserDefinedType(Format.Native)] //[Assembly: FileIOPermission(SecurityAction.RequestOptional,Unrestricted=true)] public struct TypeEmploye : INullable { // Il s'agit d'un membre de champ indicateur de position public int matricule; // Membre privé private bool m_Null; public string Method1() { //Insérez ici le code de la méthode return "Hello"; } public SqlString employeeName() { SqlServerProject_ExempleType.ActiveDirectoryService.Service AD = new SqlServerProject_ExempleType.ActiveDirectoryService.Service(); AD.Credentials = System.Net.CredentialCache.DefaultCredentials; return new SqlString(AD.GetUserInfo("initials", "oadia").ToString()); }//epmloyeeName }//typeEmploye
Ici « oadia » est un compte d’utilisateur, et l’attribut « initials » dans Active Directory fait référence au matricule.
Quand je compile le projet, il n’y a aucun problème, et le déploiement se fait automatiquement ; je crée ensuite une table de teste dont voici la structure :
J’ajoute ensuite un enregistrement. Jusque là tout se passe bien.
Code : Sélectionner tout - Visualiser dans une fenêtre à part CREATE TABLE test_table (column1 TypeEmploye)
Lorsque je teste ma première méthode en faisant : « select column1.Method1() from test_table » j’ai bien un retour d’information ‘hello’, mais la deuxième méthode me ramène des erreurs :
Code : Sélectionner tout - Visualiser dans une fenêtre à part insert into test_table values('1')
NB : j’ai pri le soin de générer auparavant l’Assembly en faisant : « sgen /assembly:SqlServerProject_ExempleType.dll » ; cela a créé la DLL « SqlServerProject_ExempleType.XmlSerializers.dll » ensuite je l’ai intégré à la base de donnée en faisant :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 Msg 6522, Niveau 16, État 2, Ligne 1 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 'TypeEmploye' : System.Security.SecurityException: Request for the permission of type 'System.Security.Permissions.EnvironmentPermission, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' failed. System.Security.SecurityException: at System.Security.CodeAccessSecurityEngine.Check(Object demand, StackCrawlMark& stackMark, Boolean isPermSet) at System.Security.CodeAccessPermission.Demand() at System.Net.CredentialCache.get_DefaultCredentials() at TypeEmploye.employeeName()
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 sp_configure 'show advanced options', 1; GO RECONFIGURE; GO sp_configure 'clr enabled', 1; GO RECONFIGURE; GO CREATE ASSEMBLY SqlServerProject_ExempleTypeAssemblyXml FROM 'C:\Documents and Settings\mpsawadogo\Mes documents\Visual Studio 2005\Projects\SqlServerProject_ExempleType\SqlServerProject_ExempleType\bin\Debug\SqlServerProject_ExempleType.XmlSerializers.dll' --WITH PERMISSION_SET = UNSAFE Go
Là je pense avoir été explicite. J’espère pouvoir être dépanné. Je coince, et c’est urgent que je puisse trouver une solution.
Cordialement.
Partager