Jump to content
Sign in to follow this  
tightDev

Arithmetischer Überlauffehler bei selben Datentyp

Recommended Posts

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 :)

Share this post


Link to post
Share on other sites

Guter Punkt, aber daran kann es nicht liegen :(

Ich habe andere Funktionen, die funktionieren auch mit GUIDs. Ich rufe die Prozedur auch (normalerweise) nicht per SQL auf sondern halt im ASP.Net, und da per parametrisierter Abfrage.

Public Shared Sub Add(ByVal Caller As Guid, ByVal User As Guid, ByVal Language As String)

	Using Command As SqlCommand = Connection.CreateCommand
		Command.CommandText = "[Language.Add]"
		Command.CommandType = CommandType.StoredProcedure
		Command.Parameters.AddWithValue("@Caller", Caller)
		Command.Parameters.AddWithValue("@User", User)
		Command.Parameters.AddWithValue("@Language", Language)
		Command.ExecuteScalar()
	End Using

End Sub

(VB.Net fehlt hier als Highlighter...)

 

Die Funktion funktioniert ja auch. Aber halt mit Fehler (auch wenn ich beide IFs rausnehme).

 

Edited by tightDev
Unnötige Tabs entfernt

Share this post


Link to post
Share on other sites

*facepalm*

Den ganzen Samstag hab ich gesucht...

 

Kurz um:

die Abfrage:

IF [dbo].[User.Exists](@User) = 0 BEGIN

war falsch. Richtig:

IF [dbo].[User.IdExists](@User) = 0 BEGIN

Erstes erwartet den Benutzernamen, Zweites die Guid...

Narf.

 

Danke trotzdem :)

Share this post


Link to post
Share on other sites
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte überlege Dir, ob es nicht sinnvoller ist ein neues Thema zu erstellen.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

Werbepartner:



×
×
  • Create New...