Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

T-SQL and CLR types for return value do not match

I'm trying to create a custom SQL Function by CLR Integration but I'm having a T-SQL and CLR types mismatch error.

DLL:

Imports System
Imports System.Data
Imports Microsoft.SqlServer.Server

Public Class Encrypter_Decrypter
    <SqlFunction(DataAccess:=DataAccessKind.Read)> _
    Public Shared Function EncryptString(ByVal strItem As String)
        Dim strPassPhrase As String = "***********"
        Dim strInitVector As String = "***********"
        Dim objEncryption = New PCI.Encryption()
        objEncryption.Initialise(strPassPhrase, strInitVector, -1, -1, -1, "", "", 1)
        Dim EncryptedString As String = objEncryption.Encrypt(strItem)
        objEncryption = Nothing
        EncryptString = EncryptedString
    End Function
End Class

Creating the SQL Function:

CREATE ASSEMBLY EncrypterDecrypter 
FROM 'c:\dll\Encrypter_Decrypter\Encrypter_Decrypter.dll'
WITH PERMISSION_SET = SAFE
GO

CREATE FUNCTION EncryptString(@strItem NVARCHAR(MAX)) RETURNS NVARCHAR(MAX) 
AS EXTERNAL NAME EncrypterDecrypter.Encrypter_Decrypter.EncryptString; 
GO

Error:

CREATE FUNCTION for "EncryptString" failed because T-SQL and CLR types for return value do not match.

Does anybody know what I'm missing?

Thanks :)

like image 694
Remo H. Jansen Avatar asked Jan 19 '23 21:01

Remo H. Jansen


1 Answers

You're missing an As String from the end of your function definition:

Public Shared Function EncryptString(ByVal strItem As String) As String

And obviously don't have Option Explicit or Option Strict turned on (either of which would alert you to this problem). By default, the return type of a function is Object, which doesn't have a mapping to any SQL Server data type.


Not knowing what your encryption package does, it's also usually a bad plan to be storing the encrypted version as a string (unless your package is automatically doing e.g. Base64 encoding?)

like image 105
Damien_The_Unbeliever Avatar answered Jan 28 '23 10:01

Damien_The_Unbeliever