T-SQL, JSON text is not properly formatted. Unexpected character '.' is found at position 50.
Recentemente mi è capitato questo errore mentre passavo un dato Json ad una store procedure invocata da codice C#:
Il dato Json era simile al seguente:
formalmente corretto e valido, mentre la store era simile a questa:
Se chiamavo la funzione direttamente funzionava tutto:
da codice C#, no.
Dopo un analisi del codice, l'errore era semplicemente nella definizione del parametro che passava i dati alla store procedure:
la lunghezza del parametro era impostata a 50 anziche a -1 (max), quindi il Json veniva troncato e non risultava formalmente corretto.
T-SQL, JSON text is not properly formatted. Unexpected character '.' is found at position 50.
Il dato Json era simile al seguente:
JSON
{
"Peso": 12.3,
"DescrizioneCommerciale": "Categoria 1",
"Posizione": 12
}
SQL
CREATE PROCEDURE SpuSave
@Json nvarchar(max)
AS
BEGIN
SET NOCOUNT ON;
INSERT INTO [fund].[TbEsempio]
([Peso],[Descrizione],[Posizione])
SELECT [Peso],[DescrizioneCommerciale],[Posizione]
FROM OPENJSON(@json,'$')
WITH(
[Peso] decimal(18,5),
[DescrizioneCommerciale] varchar(255),
[Posizione] int
) json;
La store usa le nuove funzioni T-SQL di manipolazione dei dati Json introdotte a partire da SQL Server 2016.
Se chiamavo la funzione direttamente funzionava tutto:
T-SQL
exec SpuSave '{"Peso":12.3,"DescrizioneCommerciale":"Categoria 1","Posizione":12}'
Dopo un analisi del codice, l'errore era semplicemente nella definizione del parametro che passava i dati alla store procedure:
C#
cmd.Parameters.Add("@Json", SqlDbType.NVarChar, 50)