Recentemente mi è capitato questo errore mentre passavo un dato
Json ad una store procedure invocata da codice
C#:
T-SQL, JSON text is not properly formatted. Unexpected character '.' is found at position 50.
Il dato
Json era simile al seguente:
{
"Peso": 12.3,
"DescrizioneCommerciale": "Categoria 1",
"Posizione": 12
}
formalmente corretto e valido, mentre la store era simile a questa:
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;
Se chiamavo la funzione direttamente funzionava tutto:
exec SpuSave '{"Peso":12.3,"DescrizioneCommerciale":"Categoria 1","Posizione":12}'
da codice
C#,
no.
Dopo un analisi del codice, l'errore era semplicemente nella definizione del parametro che passava i dati alla store procedure:
cmd.Parameters.Add("@Json", SqlDbType.NVarChar, 50)
la
lunghezza del parametro era impostata a
50 anziche a
-1 (max), quindi il
Json veniva troncato e non risultava formalmente corretto.