ASP.NET + SQL SERVER + JSON = 如何在 SQL Server 的两个连接表中获取数据并加载为 JSON?

Posted

技术标签:

【中文标题】ASP.NET + SQL SERVER + JSON = 如何在 SQL Server 的两个连接表中获取数据并加载为 JSON?【英文标题】:ASP.NET + SQL SERVER + JSON = how to get data in two connected tables in SQL Server and load as JSON? 【发布时间】:2014-02-21 01:57:04 【问题描述】:

是否可以在 SQL Server 数据库中的两个连接表中加载数据并转换为 json 格式?就像您有数据(在表 1 中)并且该数据的子数组在表 2 上。


    "id": "0001",   ///*** this data is from table1
    "name": "Menu1", 
    "Submenus": [  ///*** this data is from table2
         "id": "1001", "text": "Regular" ,
         "id": "1002", "text": "Chocolate" ,
         "id": "1003", "text": "Blueberry" ,
         "id": "1004", "text": "Devil's Food" 
    ]

我只想创建一个灵活的菜单控件,它的数据从数据库中加载。

请帮帮我...

【问题讨论】:

【参考方案1】:

首先,您需要从 Table Twice 获取数据。就像我的例子

我正在使用 struct 做一个 json 对象库并使用两个 SqlDataSource 获取一个 Table1 和 Table2 数据

Table2 数据将按 Table1 过滤。

最后,我将 Table2 数据保存在我的结构列表和字典中

您可以参考ConvertDataTabletoJsonString

    public struct PersonScore

    public string ID  get; set; 
    public string Name  get; set; 
    public  List<Dictionary<string, object>> Score  get; set; 


protected void Button1_Click(object sender, EventArgs e)

    DataTable Table1Data = (SqlDataSource1.Select(new DataSourceSelectArguments()) as DataView).Table;
    SqlDataSource2.SelectParameters["SutdentID"].DefaultValue = Table1Data.Rows[0]["ID"].ToString();
    DataView Table2Data = SqlDataSource2.Select(new DataSourceSelectArguments()) as DataView;
    DataTable DT = Table2Data.Table;
    List<Dictionary<string, object>> rows = new List<Dictionary<string, object>>();
    Dictionary<string, object> row;
    foreach (DataRow DR in DT.Rows)
    
         row = new Dictionary<string, object>();
        foreach (DataColumn Col in DT.Columns)
        
            row.Add(Col.ColumnName, DR[Col]);
        
        rows.Add(row);
    
    PersonScore NewPersonScore = new PersonScore
    
        ID = Table1Data.Rows[0]["ID"].ToString(),
        Name = Table1Data.Rows[0]["StudentName"].ToString(),
        Score=rows
    ;
    string jsontxt = new javascriptSerializer().Serialize(NewPersonScore);
    Response.Write(jsontxt);

【讨论】:

【参考方案2】:

如果您使用 SQL Server 2016 或 Azure SQL 数据库,则可以使用 FOR JSON AUTO:

SELECT id, name, table2.id, table2.text
FROM table1 JOIN table2 ON table1.pk = table2.fk
FOR JSON AUTO

在旧版本中,您需要在应用层执行此操作。也许您可以使用永远存在的 FOR XML AUTO,然后在应用代码中使用 XSLT 将 XML 转换为 JSON?

【讨论】:

以上是关于ASP.NET + SQL SERVER + JSON = 如何在 SQL Server 的两个连接表中获取数据并加载为 JSON?的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET/VB.NET/SQL Server 2012 - 页面不断加载

ASP.Net 成员资格 SQL Server

实体框架、ASP.NET 和 SQL Server CE

SQL Server 使用 2 个表(外键?) ASP.NET

如何通过 C# ASP.net 从 SQL Server 中的文本框中存储日期

从 Sql Server 检索照片到 asp.net 和 Vb.net