SQL VS前端处理

时间:2012-08-04 13:35:31

标签: c# sql performance

最近我正在开发一个使用JSON的项目,我有两种从数据库中获取数据的方法,以便用Json字符串来促进我的JavaScript,

第一

是在数据库中进行处理以形成Json字符串,如此

select   
       ID,
    '{ "Comments": ['+
    Substring(
        (SELECT 
           ',{ '+
           '"Comment" : "' + REPLACE(Comments,'"','\"') + '",'+
           '"Name" : "' + REPLACE(Name,'"','\"') +
         '}'
    FROM    JsonTbl
    where   JsonTbl.ID = tbl.ID
    for xml path('')
    ),2,250000)
      +'] }' as JsonData
from tbl

第二

是从数据库中选择数据而不进行任何处理,并在前端处理创建Json字符串的处理,如下所示

DataTable data = GetDataFromDatabase();
StringBuilder sb = new StringBuilder();
sb.Append("{ \"Comments\": [");
for (int i = 0; i < data.Rows.Count; i++)
{
    sb.Append("{");
    sb.Append("\"Comment\" : \"" + data.Rows[i]["Comment"].ToString().Replace('"', '\"') + "\",");
    sb.Append("\"Name\" : \"" + data.Rows[i]["Comment"].ToString().Replace('"', '\"') + "\"");
    sb.Append("},");
}
sb.Remove(sb.Length - 1, 1);

我想知道从性能和维护的角度来看哪一个会更好。

注意:请考虑我已修剪代码以便在此处发布原始代码比此大得多,并且我使用的是MSSQL 2008和.Net(C#)

3 个答案:

答案 0 :(得分:2)

更好的方法是通过SQL Server获取数据,根据C#中的数据创建对象,并使用JSON序列化程序进行JSON。可能是JSON.Net。使用当前方法维护代码可能会遇到问题。

答案 1 :(得分:1)

获得&#34;正常&#34;来自SQL服务器的数据,并使用像JSON.net这样的稳定​​库将其序列化为json。

答案 2 :(得分:1)

两者都不好。

数据库不负责为您提供数据的外部格式。所以第一个是没有。

在第二个中,您使用字符串连接来构建JSON。那很脆弱。

一个好的方法是将数据加载到对象中,然后使用JSON库将它们序列化为JSON。

DataTable dtable = GetDataFromDatabase();
var data = from row in dtable
           select new { Comment = row["Comment"],
                        Name = row["Name"] };

JavaScriptSerializer serializer = new JavaScriptSerializer();
String json = serializer.Serialize(data);