Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Проблем с RESTful webservice +JSON+SQL проект за съхранена процедура

Добре, значи има няколко неща, които трябва да промените, за да работи:

  1. Добавете конструктор без параметри към бележката, тъй като ще е необходим за десериализация:

    public Note()
    {
    }
    
  2. Отървете се от „статичното“ в полетата на Note:

    публичен статичен string Client { get; комплект; }

    публичен статичен int Case { get; комплект; }

    публичен статичен низ Текст { get; комплект; }

    публичен статичен int NoteId { get; комплект; }

    публичен статичен низ R1 { get; комплект; }

    публичен статичен низ R2 { get; комплект; }

    публичен статичен низ S1 { get; комплект; }

    публичен статичен DateTime Дата { get; комплект; }

    публичен статичен bool Тип { get; комплект; }

  3. Не изпращайте JSON масив, ако искате само 1 обект, той няма да се десериализира. Очаквате един обект, а не масив, така че не изпращайте масив.

  4. Имате Type като bool, но изпращате низ "1", това няма да се десериализира до истинска стойност, както бихте очаквали. Или изпратете true/false (не "true"/"false") или променете типа на Type на string.

  5. Отървете се от това поле за личен елемент, нямате нужда от него:

    частна бележка;

  6. Отървете се от тези конструктори, които имате там

    публична бележка (низ json)

    публична бележка (елемент от бележка)

    Не само, че нямат смисъл и няма да работят, нямате нужда от тях, тъй като десериализаторът на JSON ще попълни полетата вместо вас.

РЕДАКТИРАНЕ: Например, казвате, че не се изгражда, защото вече няма конструктор с един параметър. Разбира се, не се изгражда, има този ред

Note notesdata = new Note(item);

но нямате нужда от този ред. Каква е идеята зад тази линия? Искате екземпляр на клас Note, но вече го имате в променливата "item". Не е необходимо да създавате второ копие на това. Така че отървете се и от това.

Друга причина, поради която не се компилира, е, че се отървавате от тези статични полета, докато все още имате това във вашия метод за добавяне:

        cmd.Parameters.Add("@Text", SqlDbType.VarChar).Value = Note.Text.Trim();
        cmd.Parameters.Add("@When", SqlDbType.DateTime).Value = Note.Date;

и съм напълно сигурен, че не искате това. Вместо това искате да използвате екземпляра на обекта, който ви е изпратен:

        cmd.Parameters.Add("@Text", SqlDbType.VarChar).Value = item.Text.Trim();
        cmd.Parameters.Add("@When", SqlDbType.DateTime).Value = item.Date;

Друго нещо е, че обикновено няма причина методът Add да върне обекта, добавен към DB. Така че не се колебайте да промените това

   public Note Add(Note item)

към това

   public void Add(Note item)

и не връщайте нищо, не ви трябва.

Не съм експерт по SqlConnection и нещата около него, така че тази част не коментирам. Използвам EF в моите проекти за работа с DB. Така че може да има някои проблеми в тази част, но не мога да коментирам това.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Атрибут на измерение на SSAS като изчислена мярка

  2. Как да подобрим производителността на оператора SQL MERGE

  3. MDX Преброяване във времето без конкретна йерархия

  4. Sql сървър - регистрационният файл е пълен поради ACTIVE_TRANSACTION

  5. създайте тип в sql сървър с разрешени стойности