我正在使用asp.net和Oracle SQL数据库。
我在数据库中有一个简单的过程,它根据给定的ID返回一个文件(在本例中是一个XML文件)。在.net应用程序中,我打开一个OracleConnection并使用OracleDataReader将该文件读取到一个字符串。
这样可以正常工作,直到文件大小变得非常大(360mb),这会导致'System.OutOfMemoryException'错误,我猜这是因为进程超过800mb的内存使用量。
有更好的方法来检索文件,还是可以增加800mb的限制?时间不是问题。
数据库中的程序
PROCEDURE get_xml(xml_id IN NUMBER,
p_records OUT SYS_REFCURSOR)
IS
BEGIN
OPEN p_records FOR
SELECT xml
FROM allxml
WHERE id = xml_id;
END get_xml;
c#code
using (OracleConnection oConn = new OracleConnection(ora_connection))
{
Procedure proc = null;
OracleParameter result = null;
oConn.Open();
OracleDataReader dr = null;
proc = Procedure.CreateProcedure("get_xml", oConn)
.Number("xml_id", id)
.RefCursor("p_records", out result)
.ExecuteReader(out dr);
if (dr.Read())
{
xml = dr.GetString(0);
}
}
XmlDocument doc = new XmlDocument();
doc.LoadXml(xml);
return doc;
如您所见,我将文件加载到字符串中,然后创建一个xml,以便我可以处理它。
答案 0 :(得分:0)
多数据库应用程序的最佳方法是在数据库上仅保留文件的路径/链接,并将该大型blob存储在文件系统中。