ASP.NET数据集到XML:存储和读取

ASP.NET数据集到XML:存储和读取,asp.net,.net,sql,xml,dataset,Asp.net,.net,Sql,Xml,Dataset,[下面是修改的几乎完整的代码。当前在读取时显示非法字符错误] 我有一个C#ASP.NET应用程序,它当前正在从文件系统读取XML文件,然后将其加载到GridView控件中。在网格中,我可以删除行。网格下方还有一个文件上传按钮,用于上传PDF文件,并显示在网格中。我的代码基本上是 我工作的下一个阶段涉及从数据库字段(而不是从XML文件)以字符串形式读取XML数据。为此,我想我可以从读取XML文件开始,在aspx页面中进行更改,然后将“数据集”写入名为“PDF_存储”的数据库字段。我该怎么做呢。至关

[下面是修改的几乎完整的代码。当前在读取时显示非法字符错误]

我有一个C#ASP.NET应用程序,它当前正在从文件系统读取XML文件,然后将其加载到GridView控件中。在网格中,我可以删除行。网格下方还有一个文件上传按钮,用于上传PDF文件,并显示在网格中。我的代码基本上是

我工作的下一个阶段涉及从数据库字段(而不是从XML文件)以字符串形式读取XML数据。为此,我想我可以从读取XML文件开始,在aspx页面中进行更改,然后将“数据集”写入名为“PDF_存储”的数据库字段。我该怎么做呢。至关重要的是,我需要能够将数据集转换为某种字符串格式进行存储。这是我的代码片段

我的数据库是Oracle10,但我能理解更新sql语法

示例XML文件:

 <DataSet>
    <PDF>
        <pdf>MyPDF1.pdf</pdf>
    </PDF>
    <PDF>
        <pdf>MyPDF2.pdf</pdf>
    </PDF>
    <PDF>
        <pdf>MyPDF3.pdf</pdf>
    </PDF>
</DataSet>

以下是我过去是如何做到这一点的。对于insert,您基本上只需将数据集的xml表示形式写入一个字符串,并将其直接保存到数据库中的一个字段中。在本例中,我利用了SQLServer2008和数据库字段的XML数据类型。我认为Oracle中的数据类型是XMLTYPE

插入:

public static void InsertDataSet(string key, DataSet dataSet)
{
  string xml = string.Empty;

  using (MemoryStream ms = new MemoryStream())
  {
    dataSet.WriteXml(ms, XmlWriteMode.WriteSchema);

    ms.Position = 0;

    using (StreamReader sr = new StreamReader(ms))
    {
      xml = sr.ReadToEnd();
    }

    using (SqlServerConnection c = new SqlServerConnection(connectionString))
    {
      c.command.CommandType = CommandType.StoredProcedure;
      c.command.CommandText = "some stored procedure to do the insert";
      c.command.Parameters.Clear();

      c.command.Parameters.Add(new SqlParameter("@key", key));
      c.command.Parameters.Add(new SqlParameter("@xml", xml));

      c.command.ExecuteNonQuery();
    }
  }
}
public static DataSet GetDataSet(string key)
{
  using (SqlServerConnection c = new SqlServerConnection(connectionString))
  {
    c.command.CommandType = CommandType.StoredProcedure;
    c.command.CommandText = "some stored procedure to get the xml";
    c.command.Parameters.Clear();

    c.command.Parameters.Add(new SqlParameter("@key", key));

    dr = c.command.ExecuteReader();

    if (dr == null)
    {
      return null;
    }

    if (dr.HasRows)
    {
      while (dr.Read())
      {
        if (dr["xml_field"] != DBNull.Value)
        {
          TextReader tr = new StringReader(dr["xml_field"].ToString());

          result = new DataSet();
          result.ReadXml(tr, XmlReadMode.ReadSchema);
        }
      }
    }
  }

  return result;
}
从数据库中获取数据集非常简单,只需将数据库中的xml数据读回TextReader,然后构建一个新的数据集

获取:

public static void InsertDataSet(string key, DataSet dataSet)
{
  string xml = string.Empty;

  using (MemoryStream ms = new MemoryStream())
  {
    dataSet.WriteXml(ms, XmlWriteMode.WriteSchema);

    ms.Position = 0;

    using (StreamReader sr = new StreamReader(ms))
    {
      xml = sr.ReadToEnd();
    }

    using (SqlServerConnection c = new SqlServerConnection(connectionString))
    {
      c.command.CommandType = CommandType.StoredProcedure;
      c.command.CommandText = "some stored procedure to do the insert";
      c.command.Parameters.Clear();

      c.command.Parameters.Add(new SqlParameter("@key", key));
      c.command.Parameters.Add(new SqlParameter("@xml", xml));

      c.command.ExecuteNonQuery();
    }
  }
}
public static DataSet GetDataSet(string key)
{
  using (SqlServerConnection c = new SqlServerConnection(connectionString))
  {
    c.command.CommandType = CommandType.StoredProcedure;
    c.command.CommandText = "some stored procedure to get the xml";
    c.command.Parameters.Clear();

    c.command.Parameters.Add(new SqlParameter("@key", key));

    dr = c.command.ExecuteReader();

    if (dr == null)
    {
      return null;
    }

    if (dr.HasRows)
    {
      while (dr.Read())
      {
        if (dr["xml_field"] != DBNull.Value)
        {
          TextReader tr = new StringReader(dr["xml_field"].ToString());

          result = new DataSet();
          result.ReadXml(tr, XmlReadMode.ReadSchema);
        }
      }
    }
  }

  return result;
}
希望这有帮助


享受吧

嗨,谢谢!但是我的数据库字段“PDF_Storage”在数据库中是字符/字符串类型的数据类型;不过这不要紧,对吧?您可以将其保存为文本/字符串/字符字段类型,但xml将更有效。您可以在短期内做到这一点,但我建议将数据类型移到本地oracle xml类型以供长期使用。我同意,但不幸的是,数据库超出了我的直接接触范围,需要跨越重重障碍才能进行更改。我需要先通过文本让它工作。那么,您的代码是否仍然适用于数据库中“PDF_存储”字段的字符串/字符数据类型,或者我是否需要修改它?是的,代码应该可以正常工作,同样,没有xml数据类型,只是不是非常优化。一旦你有了它,你应该有足够的“证据”让你的dba为你更改数据类型。谢谢,道格!我正在努力。我会让你知道的。这个网站太棒了。快速反应和所有免费!