Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Sự cố với dự án thủ tục lưu trữ RESTful webservice + JSON + SQL

OK, vì vậy có một số điều bạn cần thay đổi để làm cho nó hoạt động:

  1. Thêm hàm tạo không tham số vào Ghi chú vì nó sẽ cần thiết cho quá trình giải mã hóa:

    public Note()
    {
    }
    
  2. Loại bỏ "tĩnh" trong các trường của Ghi chú:

    công khai tĩnh string Khách hàng {get; bộ; }

    public static int Trường hợp {get; bộ; }

    public static string Text {get; bộ; }

    public static int NoteId {get; bộ; }

    public static chuỗi R1 {get; bộ; }

    public static chuỗi R2 {get; bộ; }

    public static chuỗi S1 {get; bộ; }

    công khai tĩnh DateTime Ngày {get; bộ; }

    công khai tĩnh bool Loại {get; bộ; }

  3. Không gửi mảng JSON nếu bạn chỉ muốn 1 đối tượng, nó sẽ không giải kích thước. Bạn đang mong đợi một đối tượng duy nhất, không phải mảng, vì vậy đừng gửi mảng.

  4. Bạn có Loại là bool, nhưng bạn đang gửi chuỗi "1", chuỗi này sẽ không chuyển hóa thành giá trị true như bạn có thể mong đợi. Gửi true / false (không phải "true" / "false") hoặc thay đổi loại Type thành chuỗi.

  5. Loại bỏ trường mục riêng tư đó, bạn không cần nó:

    mục Ghi chú riêng;

  6. Loại bỏ những công cụ tạo mà bạn có ở đó

    Ghi chú công khai (chuỗi json)

    Ghi chú công cộng (Mục ghi chú)

    Không chỉ vậy chúng không có ý nghĩa gì và sẽ không hoạt động, bạn không cần chúng vì bộ giải mã JSON sẽ điền vào các trường cho bạn.

CHỈNH SỬA: Ví dụ, bạn nói rằng nó không xây dựng vì không còn một hàm tạo với một tham số. Tất nhiên nó không xây dựng, có dòng này

Note notesdata = new Note(item);

nhưng bạn không cần dòng đó. Ý tưởng đằng sau dòng này là gì? Bạn muốn một thể hiện của lớp Note, nhưng bạn đã có nó trong biến "item". Bạn không cần phải tạo một bản sao thứ hai của nó. Vì vậy, hãy loại bỏ điều này.

Một lý do khác, tại sao nó không biên dịch là bạn loại bỏ các trường tĩnh đó, trong khi bạn vẫn có trường này trong phương thức Thêm của mình:

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

và tôi khá chắc chắn rằng bạn không muốn điều đó. Thay vào đó, bạn muốn sử dụng phiên bản của đối tượng đã được gửi cho bạn:

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

Một điều khác là thường không có lý do gì tại sao phương thức Add lại trả về đối tượng được thêm vào DB. Vì vậy, hãy thoải mái thay đổi điều này

   public Note Add(Note item)

tới đây

   public void Add(Note item)

và không trả lại bất cứ thứ gì, bạn không cần nó.

Tôi không phải là chuyên gia về SqlConnection và những thứ xung quanh nó, nên phần đó tôi không bình luận. Tôi sử dụng EF trong các dự án của mình để làm việc với DB. Vì vậy, có thể có một số vấn đề trong phần đó, nhưng tôi không thể bình luận về điều đó.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL Server - CTE với 2 bảng cho đến khi tiêu thụ qty

  2. Tạo @TableVariable dựa trên bảng cơ sở dữ liệu hiện có?

  3. Bỏ qua một số cột nhất định khi sử dụng CHÈN SỐ LƯỢNG LỚN

  4. 3 cách sử dụng TẤT CẢ trong SQL Server

  5. Nhận con cuối cùng từ sql hierarchyid