问题 SQL 2008:将数据行作为JSON返回?
我觉得这个问题就像粘土皮江射击......“拉......砰!” ..击落..然而,我相信这是值得的。
现在有很多JS框架等使用JSON,我知道这个理由很充分。经典问题是“将数据转换为JSON的位置”。
我知道在管道中的某个时刻,你必须将数据转换为JSON,无论是在数据访问层(我正在看JSON.NET)还是我相信.NET 4.x有输出方法/序列化为JSON。
所以问题是:
考虑将SQL函数输出为JSON真的是个坏主意吗?
预选赛:
我理解尝试输出这样的1000行不是一个好主意 - 事实上,除非你真的需要,否则对于网络应用来说这不是一个好主意。
根据我的要求,我一次可能需要100行......
11459
2017-08-07 23:31
起源
答案:
答案真的是: 这取决于。
如果您的应用程序是一个没有太多用处的小应用程序,那么无论如何都要在数据库中进行。要记住的是, 当您的应用程序在12个月内被10倍用户使用时会发生什么?
如果它能够快速,简单,轻松地在您的存储过程中实现JSON编码,而不是在您的Web代码中,并允许您将应用程序移出并使用,那么这显然是要走的路。也就是说,使用其他答案中提出的解决方案“正确”完成它并不需要那么多工作。
长期和短期是,采取最符合您当前需求的解决方案,同时考虑如果您将来需要改变它将产生的影响。
5
2017-08-08 00:17
这就是[WebMethod](WebMethodAttribute)存在的原因。
2
2017-08-07 23:53
最好将数据加载到程序块,然后将其作为JSON返回。
.NET 4支持返回json,我将它作为一个ASP.NET MVC站点的一部分来做,它非常简单明了。
我建议将转换移出sql server
2
2017-08-07 23:53
我同意其他受访者的意见,即在您的应用程序代码中做得更好。但是......从理论上讲,这可以使用SQL Server在数据库中包含CLR程序集的能力 创建程序集 句法。选择真的是你的。您可以创建一个程序集来在.net中进行转换,将该程序集定义到SQL Server,然后使用包含的方法序列化为JSON作为存储过程的返回值...
2
2017-08-07 23:56
最好使用标准数据访问技术加载它,然后转换为JSON。然后,您可以在.NET中的标准对象以及客户端javascript中使用它。
1
2017-08-07 23:47
如果使用.net mvc在控制器中序列化结果并输出JsonResult,则会有一个方法Controller.Json()为您执行此操作。如果使用webforms,则可以使用http处理程序和JavascriptSerializer类。
0
2017-08-07 23:52
嘿,感谢所有的回复......我仍然惊讶于有多少人有时间提供帮助。
所有非常好的观点,肯定证实了我让app / layer进行转换工作的感觉 - 作为实际数据和前端之间的粘合剂。我想我没有跟MVC或SQL-2008保持太多,所以不确定是否有一些值得追踪的掘金。
当它解决了(在这里发布了一些链接,并进一步钓鱼)后,我选择暂时执行以下操作(现在停止使用.NET 3.5并且没有MVC ...):
- 将SQL数据作为数据表/ datareader获取
- 使用简单的数据表>集合(字典)转换为可序列化列表
因为现在我使用ASHX页面充当javascript的代理(即
通过JQuery AJAX调用),在我的ASHX页面中,我有:
context.Response.ContentType =“application / json”;
System.Web.Script.Serialization.JavaScriptSerializer json = new System.Web.Script.Serialization.JavaScriptSerializer();
然后我可以发出:json.serialize(<>)
可能看起来有点落后,但它工作得很好..主要的警告是,它一次不会返回大量数据。
再次感谢所有的回复!
0
2017-08-09 04:54
答案:
答案真的是: 这取决于。
如果您的应用程序是一个没有太多用处的小应用程序,那么无论如何都要在数据库中进行。要记住的是, 当您的应用程序在12个月内被10倍用户使用时会发生什么?
如果它能够快速,简单,轻松地在您的存储过程中实现JSON编码,而不是在您的Web代码中,并允许您将应用程序移出并使用,那么这显然是要走的路。也就是说,使用其他答案中提出的解决方案“正确”完成它并不需要那么多工作。
长期和短期是,采取最符合您当前需求的解决方案,同时考虑如果您将来需要改变它将产生的影响。
5
2017-08-08 00:17
这就是[WebMethod](WebMethodAttribute)存在的原因。
2
2017-08-07 23:53
最好将数据加载到程序块,然后将其作为JSON返回。
.NET 4支持返回json,我将它作为一个ASP.NET MVC站点的一部分来做,它非常简单明了。
我建议将转换移出sql server
2
2017-08-07 23:53
我同意其他受访者的意见,即在您的应用程序代码中做得更好。但是......从理论上讲,这可以使用SQL Server在数据库中包含CLR程序集的能力 创建程序集 句法。选择真的是你的。您可以创建一个程序集来在.net中进行转换,将该程序集定义到SQL Server,然后使用包含的方法序列化为JSON作为存储过程的返回值...
2
2017-08-07 23:56
最好使用标准数据访问技术加载它,然后转换为JSON。然后,您可以在.NET中的标准对象以及客户端javascript中使用它。
1
2017-08-07 23:47
如果使用.net mvc在控制器中序列化结果并输出JsonResult,则会有一个方法Controller.Json()为您执行此操作。如果使用webforms,则可以使用http处理程序和JavascriptSerializer类。
0
2017-08-07 23:52
嘿,感谢所有的回复......我仍然惊讶于有多少人有时间提供帮助。
所有非常好的观点,肯定证实了我让app / layer进行转换工作的感觉 - 作为实际数据和前端之间的粘合剂。我想我没有跟MVC或SQL-2008保持太多,所以不确定是否有一些值得追踪的掘金。
当它解决了(在这里发布了一些链接,并进一步钓鱼)后,我选择暂时执行以下操作(现在停止使用.NET 3.5并且没有MVC ...):
- 将SQL数据作为数据表/ datareader获取
- 使用简单的数据表>集合(字典)转换为可序列化列表
因为现在我使用ASHX页面充当javascript的代理(即
通过JQuery AJAX调用),在我的ASHX页面中,我有:
context.Response.ContentType =“application / json”;
System.Web.Script.Serialization.JavaScriptSerializer json = new System.Web.Script.Serialization.JavaScriptSerializer();
然后我可以发出:json.serialize(<>)
可能看起来有点落后,但它工作得很好..主要的警告是,它一次不会返回大量数据。
再次感谢所有的回复!
0
2017-08-09 04:54