Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
VSEE2008 + MSSQL2008 SQL Server Projekt SHA-256
Afrokalypse
myCSharp.de - Member



Dabei seit:
Beiträge: 452

Themenstarter:

VSEE2008 + MSSQL2008 SQL Server Projekt SHA-256

beantworten | zitieren | melden

verwendetes Datenbanksystem: MSSQL2008

Hallo zusammen,
ich habe diesen Artikel entdeckt: http://sqlblog.com/blogs/michael_coles/archive/2009/04/16/13253.aspx

Laut MSDN http://msdn.microsoft.com/en-us/library/w2kae45k%28v=VS.80%29.aspx
soll man ein SQL Server Projekt erstellen. Ich habe VSEE2008, scheinbar habe ich diesen Projekttyp nicht.
Deshalb habe ich gehofft, dass man das ganze auch einfach per DLL machen kann.
also habe ich den Code als DLL erstellt und im MSSQL Server als Assembly hinzugefügt.

Bis hierhin hat alles funktioniert. Nur lässt sich die Funktion GetHash nicht aufrufen.
Ich erhalte immer die Meldung
"'GetHash' wird nicht als Name einer integrierten Funktion erkannt."

Frage1: Lässt sich das überhaupt als DLL mit VSEE2008 machen?
Frage2: Wenn ja, warum lässt sich die Funktion nicht aufrufen? Muss ich noch was beachten?

Danke für die Hilfe

Afr0
Signatur:
Die Signatur wird unter Ihren Beiträgen dargestellt.

:O ?( 8) ;( 8o :] =) X( :rolleyes: :baby: :evil: :tongue:
Smilies find ich doof =]
private Nachricht | Beiträge des Benutzers
Khalid
myCSharp.de - Experte

Avatar #avatar-2534.gif


Dabei seit:
Beiträge: 3.511
Herkunft: Hannover

beantworten | zitieren | melden

Hallo,

hast du die Assembly auch richtig registriert im SQL Server? Bzw. zeige mal bitte den Code der c# Klasse und das SQL für die Registrierung.
"Jedes Ding hat drei Seiten, eine positive, eine negative und eine komische." (Karl Valentin)
private Nachricht | Beiträge des Benutzers
Afrokalypse
myCSharp.de - Member



Dabei seit:
Beiträge: 452

Themenstarter:

beantworten | zitieren | melden


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.SqlServer.Server;
using System.Data.SqlTypes;
using System.Security.Cryptography;

namespace sha_hash
{
    public class UserDefinedFunctions

    {
        [Microsoft.SqlServer.Server.SqlFunction(IsDeterministic = true, DataAccess = DataAccessKind.None)]

        public static SqlBytes GetHash(SqlString Algorithm, [SqlFacet(MaxSize = -1)] SqlBytes Plaintext)
        {
            if (Algorithm.IsNull || Plaintext.IsNull)
                return SqlBytes.Null;
            bool HashDefined = true;
            HashAlgorithm Hash = null;
            switch (Algorithm.Value.ToUpper())
            {
                case "SHA256":
                    Hash = new SHA256Managed();
                    break;
                case "SHA384":
                    Hash = new SHA384Managed();
                    break;
                case "SHA512":
                    Hash = new SHA512Managed();
                    break;
                default:
                    HashDefined = false;
                    break;
            }
            if (!HashDefined)
            {
                throw new Exception("Unsupported hash algorithm - use SHA256, SHA384 or SHA512");
            }
            byte[] HashBytes = Hash.ComputeHash(Plaintext.Value);
            // Convert result to a SqlBytes value
            return new SqlBytes(HashBytes);
        }
    }
}
und

CREATE ASSEMBLY sha_hash FROM dateipfad WITH PERMISSION_SET = SAFE

Als Fehlermeldungen erhalte ich wenn ich den Assemblynamen mit nutze:

'Die "sha_hash"-Spalte oder die benutzerdefinierte Funktion bzw. das benutzerdefinierte Aggregat "sha_hash.UserDefinedFunctions.GetHash" wurde nicht gefunden, oder der Name ist mehrdeutig.'

VG
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Afrokalypse am .
Signatur:
Die Signatur wird unter Ihren Beiträgen dargestellt.

:O ?( 8) ;( 8o :] =) X( :rolleyes: :baby: :evil: :tongue:
Smilies find ich doof =]
private Nachricht | Beiträge des Benutzers
Khalid
myCSharp.de - Experte

Avatar #avatar-2534.gif


Dabei seit:
Beiträge: 3.511
Herkunft: Hannover

beantworten | zitieren | melden

Hi,

du hast zwar jetzt die Assembly im SQL Server registriert, aber die Funktion selber noch nicht. Das musst du zusätzlich machen. In deinem Falle wäre es also

CREATE FUNCTION [dbo].sha_hash(@Algorithm [NVARCHAR](100), @Plaintext [VARBINARY](MAX))
RETURNS VARBINARY(MAX)
AS 
EXTERNAL NAME [sha_hash].[sha_hash.UserDefinedFunctions].[GetHash]

SELECT dbo.sha_hash( 'SHA256', CAST('Hallo' AS VARBINARY))
Dazu siehe CREATE FUNCTION (Transact Sql) letzter Abschnitt
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Khalid am .
"Jedes Ding hat drei Seiten, eine positive, eine negative und eine komische." (Karl Valentin)
private Nachricht | Beiträge des Benutzers
Afrokalypse
myCSharp.de - Member



Dabei seit:
Beiträge: 452

Themenstarter:

beantworten | zitieren | melden

Hi Khalid,
ich habe vergessen die Funktion zu registrieren.
Jetzt klappt es :)
Danke
Signatur:
Die Signatur wird unter Ihren Beiträgen dargestellt.

:O ?( 8) ;( 8o :] =) X( :rolleyes: :baby: :evil: :tongue:
Smilies find ich doof =]
private Nachricht | Beiträge des Benutzers