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.
😁 😮 ?( 8) 😭 8o :] 🙁 =) X( 🙂 😜 😉 :rolleyes: 👶 :evil: 👅
Smilies find ich doof =]
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)
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
Signatur:
Die Signatur wird unter Ihren Beiträgen dargestellt.
😁 😮 ?( 8) 😭 8o :] 🙁 =) X( 🙂 😜 😉 :rolleyes: 👶 :evil: 👅
Smilies find ich doof =]
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
"Jedes Ding hat drei Seiten, eine positive, eine negative und eine komische." (Karl Valentin)
Hi Khalid,
ich habe vergessen die Funktion zu registrieren.
Jetzt klappt es 😃
Danke
Signatur:
Die Signatur wird unter Ihren Beiträgen dargestellt.
😁 😮 ?( 8) 😭 8o :] 🙁 =) X( 🙂 😜 😉 :rolleyes: 👶 :evil: 👅
Smilies find ich doof =]