2010-08-07 11 views
11

Creo que esta pregunta es como disparar clay pidgeon .. "pull ... bang!" .. derribado .. pero sin embargo, vale la pena preguntar, creo.SQL 2008: ¿devuelve filas de datos como JSON?

Muchos de los frameworks de JS, etc. utilizan JSON en estos días, y por buenas razones, lo sé. La pregunta clásica es "dónde transformar los datos a JSON".

Entiendo que en algún momento del proceso, debe convertir los datos a JSON, ya sea en la capa de acceso a los datos (estoy viendo JSON.NET) o creo en .NET 4.x hay métodos de salida/serialización como JSON.

Así que la pregunta es: ¿Es realmente una mala idea contemplar una función de SQL para generar como JSON?

Calificador: Entiendo que tratar de producir miles de filas como esa no es una buena idea, de hecho, no es realmente una buena idea para las aplicaciones web de ninguna manera a menos que sea necesario. Para mi requerimiento, necesito posiblemente 100 filas a la vez ...

Respuesta

5

La respuesta es: depende.

Si su aplicación es pequeña y no recibe mucho uso, hágalo en la base de datos. Lo que hay que tener en cuenta es, , ¿qué ocurre cuando 10x utiliza la aplicación como la mayoría de los usuarios en 12 meses, tiempo?

Si hace que la codificación JSON sea rápida, simple y fácil de usar en sus procedimientos almacenados, en lugar de en su código web y le permite sacar y usar su aplicación, eso es claramente el camino a seguir. Dicho esto, realmente no se necesita mucho trabajo para hacerlo "correctamente" con las soluciones que se han sugerido en otras respuestas.

En resumen, tome la solución que mejor se adapte a sus necesidades actuales, mientras piensa en el impacto que tendrá si necesita cambiarla en el futuro.

1

Mejor cargarlo usando su técnica estándar de acceso a datos y luego convertir a JSON. Luego puede usarlo en objetos estándar en .NET así como en su lado del cliente javascript.

0

Si utiliza .net mvc serializa los resultados en sus controladores y genera un JsonResult, hay un método Controller.Json() que hace esto por usted. Si utiliza formularios web, un controlador http y la clase JavascriptSerializer serían el camino a seguir.

2

Es por eso que existe [WebMethod] (WebMethodAttribute).

2

Lo mejor es cargar los datos a la pieza del programa y luego devolverlos como JSON.

.NET 4 tiene un soporte para regresar json, y lo hice como parte de un sitio ASP.NET MVC y fue bastante simple y directo.

me recomiendan para mover la transformación del servidor SQL

2

Estoy de acuerdo con los otros encuestados que esto es mejor hacerlo en el código de aplicación. Sin embargo ... esto es teóricamente posible usando la capacidad de SQL Server para incluir ensamblajes CLR en la base de datos usando la sintaxis create assembly. La elección es realmente tuya Puede crear un ensamblaje para hacer la traducción en .net, definir ese ensamblaje en SQL Server y luego usar métodos con contenido para serializar a JSON como valores de retorno de sus procedimientos almacenados ...

0

Hola, gracias por todas las respuestas .. todavía me sorprende la cantidad de personas que tienen el tiempo para ayudar.

Todos los puntos muy buenos, y ciertamente confirmaron mi sensación de dejar que la aplicación/capa haga que la conversión funcione, como el pegamento entre los datos reales y el frontend. Supongo que no me he mantenido demasiado actualizado con MVC o SQL-2008, por lo que no estaba seguro de si había alguna pepita que valiera la pena rastrear.

Como funcionó (después de algunos enlaces publicados aquí, y aún más la pesca) he optado por hacer lo siguiente, por el momento (pegado hacia atrás utilizando .NET 3.5 y sin MVC en este momento ..):

  1. Obtención de los datos de SQL como una tabla de datos/datareader
  2. Usando una conversión sencilla tabla de datos> colección (diccionario) para obtener una lista serializable
  3. Porque ahora mismo estoy usando una página de ASHX para actuar como agente para el código JavaScript (es decir, a través de una llamada JQuery AJAX), en mi página ASHX tengo:

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

  4. puedo ejecuta: json.serialize (<>)

puede parecer un poco hacia atrás, pero funciona muy bien .. y la advertencia principal es que no se vuelve cada vez enormes cantidades de datos a la vez.

¡Una vez más, gracias por todas las respuestas!

+0

¿Por qué no decorar su método con [WebMethod] por lo que no tiene que escribir ese código repetitivo a mano? – Hut8

Cuestiones relacionadas