从数据库中获取值并通过C#创建XML文件

本文关键字:创建 XML 文件 数据库 获取 | 更新日期: 2023-09-27 18:29:12

我生成的代码从数据库中获取值并创建XML文件,但我会研究如何修改代码,以避免values列中的空单元格,我还需要从select列为1的values中选择数据。你能帮我举几个例子吗?提前谢谢。

代码

    public DataSet produceFieldsXml(int langID, int presID)
    {
        SqlConnection con = new System.Data.SqlClient.SqlConnection();
        con.ConnectionString = ConfigurationManager.ConnectionStrings["beta"].ConnectionString;

        SqlDataAdapter da = new SqlDataAdapter(@"SELECT IsubField.ID,IsubField.SUBJECT_ID as SUBJECTID,IsubField.VALUE AS DSCR,IsubField.FIELD_TYPE_ID, PFTT.VALUE AS TITLE
                                                  FROM I_SUBJECT_FIELD  IsubField, P_FIELD_TYPE_TITLE PFTT
                                                  WHERE IsubField.PRESENTATION_ID = " + presID + @"
                                                        AND IsubField.LANGUAGE_ID = " + langID + @" 
                                                        AND PFTT.FIELD_TYPE_ID = IsubField.FIELD_TYPE_ID 
                                                        AND PFTT.LANGUAGE_ID = " + langID + @" 
                                                 ORDER BY IsubField.SUBJECT_ID", con);
        DataSet ds = new DataSet();
        da.Fill(ds, "FieldItem");
        ds.Tables[0].Columns.Add("SEQ", typeof(Int64));
        DataSet dsNew = new DataSet();
        for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
        {
            SqlDataAdapter daII = new SqlDataAdapter(@"SELECT CATEGORY_ID FROM I_SUBJECT WHERE ID = " + Convert.ToInt32(ds.Tables[0].Rows[i]["SUBJECTID"].ToString().Trim()) + "", con);
            DataSet dsa = new DataSet();
            daII.Fill(dsa, "FieldItem");
            dsNew.Merge(dsa);
        }
        DataSet dsaa = new DataSet();
        for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
        {
            SqlDataAdapter daII = new SqlDataAdapter(@"SELECT SEQ FROM P_CATEGORY_FIELD WHERE CATEGORY_ID = " + Convert.ToInt32(dsNew.Tables[0].Rows[i]["CATEGORY_ID"].ToString().Trim()) + " AND FIELD_ID = " + Convert.ToInt32(ds.Tables[0].Rows[i]["FIELD_TYPE_ID"].ToString().Trim()) + "", con);
            daII.Fill(dsaa, "FieldItem");
            ds.Tables[0].Rows[i]["SEQ"] = dsaa.Tables[0].Rows[0]["SEQ"];                        
        }
        for (int i = 0; i > dsaa.Tables[0].Rows.Count; i++)
        {
            ds.Tables[0].Rows[i]["SEQ"] = dsaa.Tables[0].Rows[0]["SEQ"];         
        }
        dsaa.WriteXml(Server.MapPath("~/") + "ZipFiles''" + "new.xml");
        return ds;
    }

从数据库中获取值并通过C#创建XML文件

如果我是你,我真的会尝试学习更多的SQL,因为我很确定上面的三个查询可以是一个给定正确联接的查询。不幸的是,除非您向我们展示I_SUBJECT_FIELD、P_FIELD_TYPE_TITLE、I_SUBJECT和P_CATEGORY_FIELD的外观以及它们之间的关系,否则我们现在无法帮助您。

因为这是非常糟糕的:

for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
{
    SqlDataAdapter daII = new SqlDataAdapter(@"SELECT CATEGORY_ID FROM I_SUBJECT WHERE ID = " + Convert.ToInt32(ds.Tables[0].Rows[i]["SUBJECTID"].ToString().Trim()) + "", con);
}
for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
{
    SqlDataAdapter daII = new SqlDataAdapter(@"SELECT SEQ FROM P_CATEGORY_FIELD WHERE CATEGORY_ID = " + Convert.ToInt32(dsNew.Tables[0].Rows[i]["CATEGORY_ID"].ToString().Trim()) + " AND FIELD_ID = " + Convert.ToInt32(ds.Tables[0].Rows[i]["FIELD_TYPE_ID"].ToString().Trim()) + "", con);
}

这些查询被执行多次,最多应该执行一次(在第二种情况下有点棘手,但并非不可能),事实上,它们确实应该是主查询的一部分(前提是表设置正确)。

一个更大的头条新闻是:

for (int i = 0; i > dsaa.Tables[0].Rows.Count; i++)
{
    ds.Tables[0].Rows[i]["SEQ"] = dsaa.Tables[0].Rows[0]["SEQ"];         
}

因为这与前面for循环中的行完全相同。

一旦您设法创建了一个查询,就可以更容易地将数据转换为XML。

还可以研究在using语句中封装代码。