Hiho.
Sorry, aber ich komme grade einfach nicht weiter...
Zum DB Setup: Nichts kompliziertes. Was den Fehler verursacht ist nur eine Tabelle und eine Funktion.
Script ist angefügt.
Rufe ich die auf funktioniert sie auch, der Eintrag wird in die Tabelle eingetragen, trotzdem wird mir aber ein Fehler geworfen der die darüberlegende ASP.Net App zum Absturz bringt:
Meldung 8115, Ebene 16, Status 2, Prozedur Language.Add, Zeile 25
Arithmetischer Überlauffehler beim Konvertieren von expression in den nvarchar-Datentyp.
(1 Zeile(n) betroffen)
USE [LocEdit.Net2]
GO
/****** Objekt: Table [dbo].[tblUserLanguage] Skriptdatum: 05/26/2018 18:55:40 ******/
CREATE TABLE [dbo].[tblUserLanguage](
[ID] [int] IDENTITY(1,1) NOT NULL,
[User] [uniqueidentifier] NOT NULL,
[Language] [varchar](5) COLLATE Latin1_General_CI_AS NOT NULL CONSTRAINT [DF_tblUserLanguages_Language] DEFAULT (''),
CONSTRAINT [PK_tblUserLanguages] PRIMARY KEY CLUSTERED
(
[ID] ASC
)WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
-- ===========================================================================
-- Author: Thomas Baumann - LocEdit.Net
-- Create date: 2018-04-20
-- Description: Assigns a new language to an user account.
-- Parameters: @Caller: The user which calls this procedure.
-- @User: The user id which assign a language to.
-- @Language: The 2 letter iso code of the language to assign.
-- ===========================================================================
ALTER PROCEDURE [dbo].[Language.Add]
@Caller UNIQUEIDENTIFIER,
@User UNIQUEIDENTIFIER,
@Language VARCHAR(5)
AS BEGIN
SET NOCOUNT ON
IF
(@Caller <> @User) AND
([dbo].[User.IsAdmin](@Caller) = 0)
BEGIN
RAISERROR('SQL - Add Language: Access denied', 18, -1, 'Language.Add')
RETURN
END
IF [dbo].[User.Exists](@User) = 0 BEGIN
RAISERROR('SQL - Add Language: User not found', 18, -1, 'Language.Add')
RETURN
END
INSERT INTO [tblUserLanguage] (
[User],
[Language]
) VALUES (
@User,
@Language
)
END
Die IF Abfragen sind es nicht, die werden an zig anderen Stellen ebenfalls genutzt.
Aufruf (exemplarisch):
USE [LocEdit.Net2]
GO
DECLARE @return_value int
EXEC @return_value = [dbo].[Language.Add]
@Caller = '4117c5e5-5b7e-44e4-830d-7856168bf0c6',
@User = '4117c5e5-5b7e-44e4-830d-7856168bf0c6',
@Language = 'de'
SELECT 'Return Value' = @return_value
TRUNCATE TABLE [tblUserLanguage] -- Only for testing, so clear table afterwards
Ich nutze hier nirgendwo nvarchar, gecastet werden muss ja auch nichts 0.o
Danke im Voraus :)