sql >> Databáze >  >> RDS >> Sqlserver

Problém s webovou službou RESTful + projektem uložené procedury JSON + SQL

OK, takže je potřeba změnit několik věcí, aby to fungovalo:

  1. Přidejte konstruktor bez parametrů do Note, protože bude potřeba pro deserializaci:

    public Note()
    {
    }
    
  2. Zbavte se "statické" v polích Note:

    veřejné statické string Client { get; soubor; }

    veřejné statické int Case { get; soubor; }

    veřejné statické string Text { get; soubor; }

    veřejné statické int NoteId { get; soubor; }

    veřejné statické string R1 { get; soubor; }

    veřejné statické string R2 { get; soubor; }

    veřejné statické string S1 { get; soubor; }

    veřejné statické DateTime Date { get; soubor; }

    veřejné statické bool Type { get; soubor; }

  3. Pokud chcete pouze 1 objekt, neposílejte pole JSON, nebude deserializováno. Očekáváte jeden objekt, ne pole, takže pole neposílejte.

  4. Máte Type as bool, ale posíláte řetězec "1", nebude to deserializováno na skutečnou hodnotu, jak byste očekávali. Buď odešlete true/false (nikoli "true"/"false") nebo změňte typ Type na řetězec.

  5. Zbavte se toho pole soukromé položky, nepotřebujete ho:

    soukromá položka poznámky;

  6. Zbavte se těch konstruktorů, které tam máte

    veřejná poznámka (řetězec json)

    veřejná poznámka (položka poznámky)

    Nejen, že nedávají smysl a nebudou fungovat, ale ani je nepotřebujete, protože pole za vás vyplní deserializátor JSON.

UPRAVIT: Například říkáte, že se nesestaví, protože už neexistuje konstruktor s jedním parametrem. Samozřejmě se nestaví, existuje tato čára

Note notesdata = new Note(item);

ale ten řádek nepotřebuješ. Jaká je myšlenka za touto linií? Chcete instanci třídy Note, ale již ji máte v proměnné "item". Nemusíte vytvářet jeho druhou kopii. Tak se toho taky zbavte.

Dalším důvodem, proč se to nezkompiluje, je to, že se zbavíte těchto statických polí, když je stále máte v metodě Add:

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

a jsem si jistý, že to nechcete. Místo toho chcete použít instanci objektu, který vám byl zaslán:

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

Další věc je, že obvykle neexistuje žádný důvod, proč by metoda Add vracela objekt přidávaný do DB. Takže to klidně změňte

   public Note Add(Note item)

k tomuto

   public void Add(Note item)

a nic nevracejte, nepotřebujete to.

Nejsem odborník na SqlConnection a věci kolem toho, takže tuto část nekomentuji. EF používám ve svých projektech pro práci s DB. Takže v této části mohou být nějaké problémy, ale nemohu se k tomu vyjádřit.




  1. cizí klíče MySQL

  2. Změna časového pásma MySQL?

  3. SQL Server:VYTVOŘENÍ SESTAVENÍ pro sestavení 'Test' se nezdařilo, protože sestavení 'Test' má nesprávný formát nebo nejde o čisté sestavení .NET.

  4. Vyberte z tabulky mysql WHERE pole='$array'?