2010-08-07 75 views
11

Tôi nghĩ câu hỏi này giống như chụp pidgeon bằng đất sét .. "pull ... bang!" .. bắn xuống .. nhưng tuy nhiên, nó đáng để tôi tin.SQL 2008: trả về hàng dữ liệu dưới dạng JSON?

Rất nhiều khung công tác JS, vv sử dụng JSON những ngày này và vì lý do chính đáng mà tôi biết. Câu hỏi cổ điển là "nơi chuyển đổi dữ liệu sang JSON".

Tôi hiểu rằng tại một thời điểm nào đó trong luồng, bạn phải chuyển đổi dữ liệu sang JSON, có thể là dữ liệu trong lớp truy cập dữ liệu (tôi đang xem JSON.NET) hoặc tôi tin vào .NET 4.x có các phương thức để xuất/tuần tự hóa dưới dạng JSON.

Vì vậy, câu hỏi là: Có thực sự là một ý tưởng tồi khi suy ngẫm một hàm SQL để xuất dưới dạng JSON?

Vòng loại: Tôi hiểu cố gắng xuất 1000 hàng như vậy không phải là ý tưởng hay - thực tế không phải là ý tưởng hay cho các ứng dụng web, trừ khi bạn thực sự phải làm vậy. Đối với yêu cầu của tôi, tôi cần có thể 100 hàng tại một thời điểm ...

Trả lời

5

Câu trả lời thực sự là: nó phụ thuộc.

Nếu ứng dụng của bạn là một ứng dụng nhỏ không nhận được nhiều sử dụng, thì tất cả có nghĩa là thực hiện nó trong cơ sở dữ liệu. Điều cần lưu ý là, điều gì xảy ra khi ứng dụng của bạn đang được sử dụng gấp 10 lần nhiều người dùng trong thời gian 12 tháng?

Nếu nó làm cho việc mã hóa JSON dễ dàng, đơn giản và dễ dàng trong các quy trình được lưu trữ của bạn, thay vì trong mã web của bạn và cho phép bạn đưa ứng dụng của mình ra và sử dụng, thì đó rõ ràng là cách để đi. Điều đó nói rằng, nó thực sự không mất nhiều công sức để làm điều đó "đúng" với các giải pháp đã được đề xuất trong các câu trả lời khác.

Dài và ngắn gọn, hãy sử dụng giải pháp phù hợp nhất với nhu cầu hiện tại của bạn, trong khi suy nghĩ về tác động sẽ có nếu bạn cần thay đổi trong tương lai.

1

Tốt hơn để tải nó bằng cách sử dụng kỹ thuật truy cập dữ liệu chuẩn của bạn và sau đó chuyển sang JSON. Sau đó bạn có thể sử dụng nó trong các đối tượng tiêu chuẩn trong .NET cũng như javascript phía máy khách của bạn.

0

Nếu sử dụng .net mvc bạn tuần tự hóa kết quả của bạn trong bộ điều khiển và xuất JsonResult, có một phương thức Controller.Json() thực hiện điều này cho bạn. Nếu sử dụng các biểu mẫu web, trình xử lý http và lớp JavascriptSerializer sẽ là cách để đi.

2

Đây là lý do tại sao [WebMethod] (WebMethodAttribute) tồn tại.

2

Tốt nhất để tải dữ liệu vào phần chương trình và sau đó trả lại dữ liệu dưới dạng JSON.

.NET 4 có hỗ trợ trả lại json và tôi đã làm nó như là một phần của một trang ASP.NET MVC và nó khá đơn giản và dễ hiểu.

Tôi khuyên bạn nên di chuyển chuyển đổi ra khỏi máy chủ sql

2

Tôi đồng ý với những người trả lời khác rằng việc này được thực hiện tốt hơn trong mã ứng dụng của bạn. Tuy nhiên ... đây là lý thuyết có thể sử dụng khả năng của SQL Server để bao gồm các hội đồng CLR trong cơ sở dữ liệu sử dụng cú pháp create assembly. Sự lựa chọn thực sự là của bạn. Bạn có thể tạo một assembly để thực hiện việc dịch trong .net, định nghĩa assembly đó với SQL Server và sau đó sử dụng các method chứa (s) để serialize thành JSON như các giá trị trả lại từ các thủ tục đã lưu trữ của bạn ...

0

Xin cảm ơn tất cả các câu trả lời .. nó vẫn khiến tôi ngạc nhiên khi có bao nhiêu người ở đó có thời gian để giúp đỡ.

Tất cả các điểm rất tốt, và chắc chắn xác nhận cảm giác của tôi cho phép ứng dụng/lớp thực hiện công việc chuyển đổi - như keo giữa dữ liệu thực tế và giao diện người dùng. Tôi đoán tôi đã không giữ quá nhiều với MVC hoặc SQL-2008, và do đó đã không chắc chắn nếu có một số cố gắng giá trị theo dõi xuống.

Vì nó làm việc ra (sau đây một số liên kết được đăng ở đây, và câu cá hơn nữa) Tôi đã chọn để làm như sau trong thời gian tới (bị mắc kẹt lại sử dụng .NET 3.5 và không có MVC ngay bây giờ ..):

  1. Lấy dữ liệu SQL như một DataTable/datareader
  2. sử dụng một chuyển đổi DataTable> Bộ sưu tập (từ điển) đơn giản cho một danh sách serializable
  3. Bởi vì ngay bây giờ tôi đang sử dụng một trang ASHX để hoạt động như các nhà môi giới để javascript (tức là qua cuộc gọi JQuery AJAX), trong trang ASHX của tôi, tôi có:

    context.Response.ContentType = "application/json"; System.Web.Script.Serialization.JavaScriptSerializer json = new System.Web.Script.Serialization.JavaScriptSerializer();

  4. tôi có thể sau đó phát hành: json.serialize (<>)

Có thể có vẻ hơi lạc hậu, nhưng nó hoạt động tốt .. và sự báo trước chính là nó không bao giờ quay trở lại một lượng lớn dữ liệu tại một thời điểm.

Một lần nữa, cảm ơn tất cả các đại diện!

+0

Tại sao bạn không trang trí phương pháp của mình bằng [WebMethod] để bạn không phải viết mã soạn sẵn bằng tay? – Hut8

Các vấn đề liên quan