2012-09-24 24 views
0
<WebMethod(Description:="JSON Hierarchy Object")> _ 
    <ScriptMethod(ResponseFormat:=ResponseFormat.Json)> _ 
    Public Function xmlData() As Object 

     Using _ds As DataSet = db.ExecuteDataSet(CommandType.Text, "Select NodeID, NodeName,ParentID from Nodes WHERE ParentID=1") 
      _ds.DataSetName = "Menus" 
      _ds.Tables(0).TableName = "Menu" 
      Dim relation As New DataRelation("ParentChild", _ds.Tables("Menu").Columns("NodeID"), _ds.Tables("Menu").Columns("ParentID"), True) 
      relation.Nested = True 
      _ds.Relations.Add(relation) 
      Dim StrDc As String() = New String(_ds.Tables(0).Columns.Count - 1) {} 
      Dim HeadStr As String = String.Empty 
      For i As Integer = 0 To _ds.Tables(0).Columns.Count - 1 
       StrDc(i) = _ds.Tables(0).Columns(i).Caption 
       HeadStr += """" + StrDc(i) + """ : """ + StrDc(i) + i.ToString() + "¾" + """," 
      Next 
      HeadStr = HeadStr.Substring(0, HeadStr.Length - 1) 
      Dim Sb As New StringBuilder() 
      Sb.Append("{""" + _ds.Tables(0).TableName + """ : [") 
      For i As Integer = 0 To _ds.Tables(0).Rows.Count - 1 
       Dim TempStr As String = HeadStr 
       Sb.Append("{") 
       For j As Integer = 0 To _ds.Tables(0).Columns.Count - 1 
        TempStr = TempStr.Replace(_ds.Tables(0).Columns(j).ToString + j.ToString() + "¾", _ds.Tables(0).Rows(i)(j).ToString()) 
       Next 
       Sb.Append(TempStr + "},") 
      Next 
      Sb = New StringBuilder(Sb.ToString().Substring(0, Sb.ToString().Length - 1)) 
      Sb.Append("]}") 
      Return Sb.ToString 
     End Using 

    End Function 

我使用上面的函數返回一個JSON String但是當我在這個SQL查詢Select NodeID, NodeName,ParentID from Nodes WHERE ParentID=1使用ParentID=1我得到以下錯誤數據集不執行

System.ArgumentException: This constraint cannot be enabled as not all values have corresponding parent values. 
    at System.Data.ConstraintCollection.AddForeignKeyConstraint(ForeignKeyConstraint constraint) 
    at System.Data.ConstraintCollection.Add(Constraint constraint, Boolean addUniqueWhenAddingForeign) 
    at System.Data.DataRelationCollection.DataSetRelationCollection.AddCore(DataRelation relation) 
    at System.Data.DataRelationCollection.Add(DataRelation relation) 
    at Haggler.xmlData() in D:\2008VS\Haggler\EntLib5\App_Code\Haggler.vb:line 114 

表結構:

enter image description here

它工作正常,當我刪除在哪裏從Sql查詢條款..任何幫助非常感激。

回答

2

您可以使用此代碼(Replace True with False)

Dim relation As New DataRelation("ParentChild", _ds.Tables("Menu").Columns("NodeID"), _ds.Tables("Menu").Columns("ParentID"), False) 

鏈接替換:http://msdn.microsoft.com/fr-fr/library/9ae5a582%28v=vs.80%29.aspx

+0

Okay..but的區別是什麼?真假在這裏意味着什麼?如果我將其更改爲False,它是否會破壞層次結構?它在我將其更改爲false時起作用。 – Monodeep

+0

@Monodeep False表示不創建約束,我添加了鏈接 –

+0

謝謝你的伴侶:) – Monodeep