Précédent   Forum des professionnels en informatique > Bases de données > MS SQL-Server > Développement
Développement Forum d'entraide sur le Transact-SQL, le CLR, les procédures stockées, les triggers, les requêtes SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 28/10/2011, 13h32   #1
Candidat au titre de Membre du Club
 
Inscription : juin 2006
Messages : 40
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 40
Points : 11
Points : 11
Par défaut Référencer une dll du .Net

Bonjour tout le monde,

J'aimerai référencer du code C# dans SQL Server 2008 R2. Pour ce faire, j'ai créé un nouveau projet "SQL Server Project" depuis Visual Studio 2008. en suivant le tutoriel http://rudi.developpez.com/sqlserver.../sprocsdotnet/.
Lorsque je tente d'ajouter la référence System.Web je ne la trouve pas dans la liste. Ceci est normal puisqu'elle nest pas dans les DLL autorisées par SQL Server. J'ai donc suivi le topic http://www.developpez.net/forums/d70...e-stockee-clr/

Côté SQL Server je dois aussi autoriser cette DLL et c'est là que mes problèmes commencent:

Si j'essaye la comande suivante :
Code :
1
2
3
CREATE ASSEMBLY System_Web FROM
'C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.Web.dll'
    WITH PERMISSION_SET=UNSAFE
J'obtiens alors le message :
Citation:
Assembly 'System.Web' references assembly 'system.web, version=2.0.0.0, culture=neutral, publickeytoken=b03f5f7f11d50a3a.', which is not present in the current database. SQL Server attempted to locate and automatically load the referenced assembly from the same location where referring assembly came from, but that operation has failed (reason: version, culture or public key mismatch). Please load the referenced assembly into the current database and retry your request.
J'ai essayé de référencer manuellement les dépendances
Citation:
System.DirecoryServices.dll
System.DirecoryServices.Protocols.dll
System.EnterpriseServices.dll
System.Runtime.Remoting.dll
Pour les 2 premières il a fallut exécuter le code suivant
Code :
1
2
3
CREATE ASSEMBLY [System.DirecoryServices.dll]
FROM 'C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.DirectoryServices.dll'
WITH PERMISSION_SET = UNSAFE
Pour les 2 dernières impossible
Citation:
An asymmetric key with name 'System_EnterpriseServices_Key' already exists or this asymmetric key already has been added to the database.
Alors que je n'ai jamais exécuté ce code avant (testé sur 2 serveurs différents) Je me suis dit que si la clé existait déjà alors le CREATE ASSEMBLY devait fonctionner. Pas du tout.

Dernier point
Code :
SELECT * FROM sys.asymmetric_keys
Ne m'affiche pas les clés soient disant présentes

Merci pour votre aide.
CoderCool est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/10/2011, 15h10   #2
Rédacteur/Modérateur

 
Avatar de SQLpro
 
Homme Frédéric BROUARD
Expert SGBDR & SQL
Inscription : mai 2002
Messages : 10 959
Détails du profil
Informations personnelles :
Nom : Homme Frédéric BROUARD
Localisation : France

Informations professionnelles :
Activité : Expert SGBDR & SQL
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 10 959
Points : 17 791
Points : 17 791
Est-ce que votre base est digne de confiance ? (TRUSTWORTHY ON)

A +
__________________
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro
http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation
* * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * *
SQLpro est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/10/2011, 09h17   #3
Candidat au titre de Membre du Club
 
Inscription : juin 2006
Messages : 40
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 40
Points : 11
Points : 11
Par défaut CLR - Create Assembly

Bonjour,

Merci pour cette info. J'ai testé sur une base :

Code :
1
2
3
4
5
ALTER DATABASE [AdventureWorks] SET TRUSTWORTHY ON
 
CREATE ASSEMBLY [System.Web.dll]
FROM 'C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.Web.dll'
WITH PERMISSION_SET = UNSAFE
et j'ai alors les messages précédemment obtenus :
Citation:
Warning: The Microsoft .NET Framework assembly 'system.web, version=2.0.0.0, culture=neutral, publickeytoken=b03f5f7f11d50a3a, processorarchitecture=x86.' you are registering is not fully tested in the SQL Server hosted environment and is not supported. In the future, if you upgrade or service this assembly or the .NET Framework, your CLR integration routine may stop working. Please refer SQL Server Books Online for more details.
Warning: The Microsoft .NET Framework assembly 'system.drawing, version=2.0.0.0, culture=neutral, publickeytoken=b03f5f7f11d50a3a, processorarchitecture=msil.' you are registering is not fully tested in the SQL Server hosted environment and is not supported. In the future, if you upgrade or service this assembly or the .NET Framework, your CLR integration routine may stop working. Please refer SQL Server Books Online for more details.
Warning: The Microsoft .NET Framework assembly 'system.directoryservices, version=2.0.0.0, culture=neutral, publickeytoken=b03f5f7f11d50a3a, processorarchitecture=msil.' you are registering is not fully tested in the SQL Server hosted environment and is not supported. In the future, if you upgrade or service this assembly or the .NET Framework, your CLR integration routine may stop working. Please refer SQL Server Books Online for more details.
Warning: The Microsoft .NET Framework assembly 'system.directoryservices.protocols, version=2.0.0.0, culture=neutral, publickeytoken=b03f5f7f11d50a3a, processorarchitecture=msil.' you are registering is not fully tested in the SQL Server hosted environment and is not supported. In the future, if you upgrade or service this assembly or the .NET Framework, your CLR integration routine may stop working. Please refer SQL Server Books Online for more details.
Warning: The Microsoft .NET Framework assembly 'system.enterpriseservices, version=2.0.0.0, culture=neutral, publickeytoken=b03f5f7f11d50a3a, processorarchitecture=x86.' you are registering is not fully tested in the SQL Server hosted environment and is not supported. In the future, if you upgrade or service this assembly or the .NET Framework, your CLR integration routine may stop working. Please refer SQL Server Books Online for more details.
Warning: The Microsoft .NET Framework assembly 'system.runtime.remoting, version=2.0.0.0, culture=neutral, publickeytoken=b77a5c561934e089, processorarchitecture=msil.' you are registering is not fully tested in the SQL Server hosted environment and is not supported. In the future, if you upgrade or service this assembly or the .NET Framework, your CLR integration routine may stop working. Please refer SQL Server Books Online for more details.
Msg 10300, Level 16, State 2, Line 1
Assembly 'System.Web' references assembly 'system.web, version=2.0.0.0, culture=neutral, publickeytoken=b03f5f7f11d50a3a.', which is not present in the current database. SQL Server attempted to locate and automatically load the referenced assembly from the same location where referring assembly came from, but that operation has failed (reason: version, culture or public key mismatch). Please load the referenced assembly into the current database and retry your request.
L'ajout d'une DLL peut-elle être globale ? Au niveau serveur et non base ?
CoderCool est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/10/2011, 14h44   #4
Membre Expert
 
Homme Etienne ZINZINDOHOUE
Ingénieur développement
Inscription : mars 2010
Messages : 1 139
Détails du profil
Informations personnelles :
Nom : Homme Etienne ZINZINDOHOUE
Localisation : France, Nord (Nord Pas de Calais)

Informations professionnelles :
Activité : Ingénieur développement
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : mars 2010
Messages : 1 139
Points : 2 467
Points : 2 467
Envoyer un message via Yahoo à zinzineti
1.
As-tu essayé d'ajoutant une directive using en entête de ta classe ?
2.

Pour l'ajout manuel de reférence, as-tu trouvé dans l'onglet SQL server (de la fenêtre Ajout des reférences) la dll system.Web ?


3. as-tu essayé d’enregistrer la dll avec Regsvr32 ?

A+
__________________
Etienne ZINZINDOHOUE
Billets-Articles
zinzineti est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 31/10/2011, 14h45   #5
Membre Expert
 
Homme Etienne ZINZINDOHOUE
Ingénieur développement
Inscription : mars 2010
Messages : 1 139
Détails du profil
Informations personnelles :
Nom : Homme Etienne ZINZINDOHOUE
Localisation : France, Nord (Nord Pas de Calais)

Informations professionnelles :
Activité : Ingénieur développement
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : mars 2010
Messages : 1 139
Points : 2 467
Points : 2 467
Envoyer un message via Yahoo à zinzineti
Oups !
__________________
Etienne ZINZINDOHOUE
Billets-Articles
zinzineti est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/11/2011, 09h18   #6
Candidat au titre de Membre du Club
 
Inscription : juin 2006
Messages : 40
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 40
Points : 11
Points : 11
Bonjour Zinzineti et merci pour ta réponse,

Citation:
Envoyé par zinzineti Voir le message
1.
As-tu essayé d'ajoutant une directive using en entête de ta classe ?
Dans le code c#, c'est le cas effectivement.

Citation:
2.

Pour l'ajout manuel de reférence, as-tu trouvé dans l'onglet SQL server (de la fenêtre Ajout des reférences) la dll system.Web ?
Ce point là fonctionne dans Visual Studio, c'est au niveau SQL Server que le Create Assembly pose problème.

Citation:
3. as-tu essayé d’enregistrer la dll avec Regsvr32 ?
Non, mais comme la dll est dans le Gac. Je vais tenter
CoderCool est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/11/2011, 16h39   #7
Expert Confirmé Sénior
 
Homme François
Chef de projet NTIC
Inscription : janvier 2007
Messages : 5 352
Détails du profil
Informations personnelles :
Nom : Homme François
Âge : 51
Localisation : France

Informations professionnelles :
Activité : Chef de projet NTIC

Informations forums :
Inscription : janvier 2007
Messages : 5 352
Points : 9 745
Points : 9 745
Citation:
Envoyé par CoderCool Voir le message
Non, mais comme la dll est dans le Gac. Je vais tenter
Inutile. Cela ne sert que pour les DLL COM, cela n'a absolument aucun rapport avec le sujet.

D'une manière générale,ce n'est pas du tout une bonne idée d'utiliser le SQLCLR pour de la communication externe (ce que semble indiquer ton idée de rajouter la DLL System.Web).

Il vaut mieux se limiter aux éléments du framework apparaissant quand on crée un projet SQL CLR sous Visual Studio.

Accessoirement, il est impossible d'enregistrer une assembly qui déclare des variables static non readonly. (question de sécurité : un objet SQLCLR doit être "sans contexte").

Si tu dois faire causer ta base avec le monde externe, je te suggère plutot d'aller voir du coté du Service Broker.

Précise nous ton besoin fonctionnel et on pourra t'aiguiller.
__________________

Je ne réponds pas aux questions techniques par MP ! Le forum est là pour ça...


Une réponse vous a aidé ? utiliser le bouton

"L’ennui dans ce monde, c’est que les idiots sont sûrs d’eux et les gens sensés pleins de doutes". B. Russel
Bluedeep est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/11/2011, 11h47   #8
Candidat au titre de Membre du Club
 
Inscription : juin 2006
Messages : 40
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 40
Points : 11
Points : 11
Bonjour,

Merci pour ta réponse et désolé pour mon retour un peu long.
J'ai besoin de travailler mes résultats de requête pour au final les transformer en html. Mon idée était de passer par un GridView afin de me simplifier la vie (je passe par les templates de formatage du GridView comme cela c'est simple et efficace). Bref mon code fonctionne bien mais comme System.Web n'est pas autorisé je ne peux pas l'implémenter dans mon SQL server.

Citation:
Il vaut mieux se limiter aux éléments du framework apparaissant quand on crée un projet SQL CLR sous Visual Studio.
C'est effectivement la plupart des suggestions trouvées sur le web. Je vais donc me plier à cette avis...

Citation:
Si tu dois faire causer ta base avec le monde externe, je te suggère plutot d'aller voir du coté du Service Broker.
Je vais tester... Je connais pas bien le truc mais si je peux effectuer la même opération, pourquoi pas.

Merci
CoderCool est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/11/2011, 15h20   #9
Expert Confirmé Sénior
 
Homme François
Chef de projet NTIC
Inscription : janvier 2007
Messages : 5 352
Détails du profil
Informations personnelles :
Nom : Homme François
Âge : 51
Localisation : France

Informations professionnelles :
Activité : Chef de projet NTIC

Informations forums :
Inscription : janvier 2007
Messages : 5 352
Points : 9 745
Points : 9 745
Bonjour,

Citation:
Envoyé par CoderCool Voir le message
Merci pour ta réponse et désolé pour mon retour un peu long.
J'ai besoin de travailler mes résultats de requête pour au final les transformer en html.
Cela ne me semble pas du tout relever du boulot d'un SGBD ......
__________________

Je ne réponds pas aux questions techniques par MP ! Le forum est là pour ça...


Une réponse vous a aidé ? utiliser le bouton

"L’ennui dans ce monde, c’est que les idiots sont sûrs d’eux et les gens sensés pleins de doutes". B. Russel
Bluedeep est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/11/2011, 10h17   #10
Candidat au titre de Membre du Club
 
Inscription : juin 2006
Messages : 40
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 40
Points : 11
Points : 11
Citation:
Envoyé par Bluedeep Voir le message
Bonjour,
Cela ne me semble pas du tout relever du boulot d'un SGBD ......
Bonjour,

Les frontières bougent ... Effectivement cela n'est pas du ressort du SGBD (il y a d'ailleurs beaucoup d'anciennes et récentes discussions sur ce sujet dans ce forum). Ceci dit, j'hérite d'une architecture et plutôt que de concerver des TSQL de plusieurs kilomètres qui mettent en forme le résultat j'externalise un peu le traitement en utilisant un langage plus adapté à mes yeux.

Merci pour votre aide.
CoderCool est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 09h10.


 
 
 
 
Partenaires

Hébergement Web