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:

JSON

{
  "Peso": 12.3,
  "DescrizioneCommerciale": "Categoria 1",
  "Posizione": 12
}
formalmente corretto e valido, mentre la store era simile a questa:

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}'
da codice C#, no.

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)
la lunghezza del parametro era impostata a 50 anziche a -1 (max), quindi il Json veniva troncato e non risultava formalmente corretto.
Tags:
Errori120 JSON31 SQL Server100 SQL Server 201610
Potrebbe interessarti anche: