Avatar billede mungojerrie Nybegynder
04. juni 2008 - 19:21 Der er 10 kommentarer og
1 løsning

Kald til C# kode fra sql

Hej folkens

Kan man kalde en binær C# fil fra transact sql på Sql Server 2005
Avatar billede arne_v Ekspert
04. juni 2008 - 19:41 #1
Ja.

I 2005 kan du skrive stored procedures i C# og den kode kan naturligvis
kalde andre assemblies.
Avatar billede mungojerrie Nybegynder
04. juni 2008 - 20:10 #2
tror ikke helt vi snakker samme sprog :-)
jeg vil gerne skrive noget t-sql som eksempelvis kan kalde en c# fil som kan kryptere en tekst streng for mig og returnere strengen som jeg så vil gemme i en tabel.
Avatar billede arne_v Ekspert
04. juni 2008 - 20:26 #3
Det vil en stored procedure - rettelse en userdefined function - i C# vaere
perfekt til.
Avatar billede arne_v Ekspert
04. juni 2008 - 20:28 #4
Eksempel:

using System;
using System.Data.Sql;
using System.Data.SqlTypes;
using System.Data.SqlClient;
using System.Text;
using System.Security.Cryptography;

using Microsoft.SqlServer.Server;

namespace E
{
    public class Hash
    {
        private static readonly Encoding utf8 = new UTF8Encoding();
        private static readonly MD5 md5 = new MD5CryptoServiceProvider();
        [SqlFunction]
        public static SqlString MD5Calc(string s)
        {
            byte[] binres = md5.ComputeHash(utf8.GetBytes(s));
            StringBuilder res = new StringBuilder("");
            for(int i = 0; i < binres.Length; i++)
            {
                res.Append(String.Format("{0:x2}", binres[i]));
            }
            return res.ToString();
        }
    }
}

efter at vaere loadet og defineret kan den kaldes som:

SELECT MD5(felt) FROM tabel
Avatar billede mungojerrie Nybegynder
04. juni 2008 - 20:43 #5
øhh, jeg er stadig ikke helt med.....
har du nogle eksempler eller noget?
Avatar billede mungojerrie Nybegynder
04. juni 2008 - 21:09 #6
okay, tak for eksemplet
nu har jeg ikke prøvet at loade sådan en fyr på sql server 2005
har du viden om hvordan det foregår?
Avatar billede arne_v Ekspert
04. juni 2008 - 21:41 #7
Jeg brugte:

CREATE ASSEMBLY MyUDF FROM 'C:\E\MyUDF.dll' WITH PERMISSION_SET = SAFE
GO
CREATE FUNCTION MD5(@val NVARCHAR(1000))
RETURNS NVARCHAR(50)
AS
EXTERNAL NAME MyUDF.[E.Hash].MD5Calc
GO
Avatar billede moykal Nybegynder
12. juni 2008 - 22:22 #8
Læs om SQLCLR
Avatar billede arne_v Ekspert
29. juni 2008 - 05:25 #9
mungojerrie ?
Avatar billede mungojerrie Nybegynder
29. juni 2008 - 17:13 #10
har ikke fået det prøvet af endnu, men er sikker på det duer, du plejer jo at have godt styr på din kode :-)
så smid gerne et svar, så godkender jeg den
Avatar billede arne_v Ekspert
29. juni 2008 - 18:00 #11
svar
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester