我試圖創建一個具有以下結構的XML:C#DbDataReader雙迴路
<ResponseSubschemas>
<organism>LMO</organism>
<Subschema>
<id>MLST</id>
<name>MLST</name>
<loci>
<locus>LMO0558</locus>
<locus>LMO0563</locus>
</loci>
</Subschema>
<Subschema>
<id>MLVST</id>
<name>MLVST</name>
<loci>
<locus>LMO1305</locus>
<locus>LMO1089</locus>
</loci>
</Subschema>
</ResponseSubschemas>
我有A.O。兩個表在我的數據庫:
subschema
與欄目ID
和Name
subschemamembers
與欄目subschemaID
和locusID
。
我有下面的C#代碼:
XElement rootNode = new XElement("ResponseSubschemas", new XElement("organism", organismID));
DbDataReader subschemaReader = conn.Query("SELECT ID, Name FROM subschema WHERE OrganismID = ?", organismDbID);
while (subschemaReader.Read())
{
string subschemaDbID = (string)subschemaReader["ID"];
XElement subschemaNode = new XElement("Subschema",
new XElement("id", subschemaDbID),
new XElement("name", subschemaReader["Name"])
);
rootNode.Add(subschemaNode);
}
responseXml = rootNode.ToString();
它創建了下面的部分XML:在
<ResponseSubschemas>
<organism>LMO</organism>
<Subschema>
<id>MLST</id>
<name>MLST</name>
</Subschema>
<Subschema>
<id>MLVST</id>
<name>MLVST</name>
</Subschema>
</ResponseSubschemas>
現在我需要添加每個Subschema
節點loci
節點,環軌跡並添加它們。我試圖在while循環中創建一個新的DbDataReader
,但後來我得到如下錯誤:There is already an open DataReader associated with this Connection which must be closed first
。那麼,我該怎麼做?
更新:
試圖去與JOIN
辦法,我已經制作了下面的SQL:
SELECT subschema.Id, subschema.name as subschemaName, locus.Name as locusName
FROM subschema
LEFT JOIN subschemamembers ON subschemamembers.SubSchemaID = subschema.PrimKey
LEFT JOIN locus ON subschemamembers.LocusID = locus.ID
WHERE subschema.OrganismID = 6
ORDER BY subschema.Id;
這給下面的輸出:
Id subschemaName locusName
MLST MLST LMO0558
MLST MLST LMO0563
MLVST MLVST LMO1305
MLVST MLVST LMO1089
,但我仍然無法弄清楚我將如何跟蹤「當前數據庫行是否指向不同的subschemaDbID」。
你能看到我的更新嗎?提前致謝。 – BioGeek
在循環的每次迭代中,都會讀取所有字段。例如,在循環外有一個變量,例如字符串currentSubschemaId,用於存儲該標識。在循環中,如果currentSubschemaId!= reader [「Id」],那麼是時候創建一個新的XElement(「Subschema」)(並將reader [「Id」]存儲到currentSubschemaId中)。 –