ASP.NET数据集到XML:存储和读取
[下面是修改的几乎完整的代码。当前在读取时显示非法字符错误] 我有一个C#ASP.NET应用程序,它当前正在从文件系统读取XML文件,然后将其加载到GridView控件中。在网格中,我可以删除行。网格下方还有一个文件上传按钮,用于上传PDF文件,并显示在网格中。我的代码基本上是 我工作的下一个阶段涉及从数据库字段(而不是从XML文件)以字符串形式读取XML数据。为此,我想我可以从读取XML文件开始,在aspx页面中进行更改,然后将“数据集”写入名为“PDF_存储”的数据库字段。我该怎么做呢。至关重要的是,我需要能够将数据集转换为某种字符串格式进行存储。这是我的代码片段 我的数据库是Oracle10,但我能理解更新sql语法 示例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_存储”的数据库字段。我该怎么做呢。至关
<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为你更改数据类型。谢谢,道格!我正在努力。我会让你知道的。这个网站太棒了。快速反应和所有免费!