【发布时间】:2020-04-08 17:19:25
【问题描述】:
我想通过调用它的存储过程插入多行 来自 C#.NET。我正在使用 OracleDataAccess.dll 非托管 .net 驱动程序 由 Oracle 为 .NET 提供并使用 VS 2015。我的程序是控制台 将读取 excel 文件(一个接一个)查找特定的程序的程序 excel中的工作表并将工作表中的数据插入到 oracle 中的表。
我研究发现有人说可以通过 XML、UDT 和 OracleBulkCopy 完成,但我发现的代码不起作用。一世 尝试通过将其作为 xml 代码行运行来对其进行测试。屏幕转储 最后提供了这个错误。
我正在寻找有关如何将其从 C# 传递到 Oracle 以实现将这些记录插入 Oracle 表中的结果的解决方案。一世 如果您能帮助我在 Oracle 和 C#.NET。
C#.NET 端代码如下:
public class DSelect
{
public string Installation { get; set; }
public int Account { get; set; }
public int BusinessNumber { get; set; }
public long Sysd { get; set; }
public decimal LocX { get; set; }
public string Type { get; set; }
public string Wattage { get; set; }
public decimal ALen { get; set; }
public int LWatt { get; set; }
public string Tempr { get; set; }
public DateTime CreatedDate { get; set; }
}
List<DSelect> listDSelect = new List<DSelect>();
.... Reading an excel worksheet row in a loop and building my list. There can be between 500 to 1000 rows of data in the worksheet
var deSel= new DSelect();
deSel.Installation = "install1";
.................................
listDSelect.Add(deSel)
XmlSerializer serializer = new XmlSerializer(typeof(List<DSelect>));
var stringwriter = new System.IO.StringWriter();
serializer.Serialize(stringwriter, listDSelect);
传递给存储过程以插入到 Oracle 数据库 12c 中的表中。
- 我想将整个列表作为对象传递给 oracle 存储过程。
- 在 oracle 存储过程中接收它并将其插入到表中。
在 SQL Developer 中失败的测试代码:
DECLARE
p_AdditionRequest varchar2(30000); -- CLOB;
t_xmlType SYS.XMLTYPE;
BEGIN
p_AdditionRequest:= '<?xml version="1.0" encoding="utf-16"?>
<ArrayOfDetailedSelection xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<DetailedSelection>
<Installation>645805</InstallationNumber>
<AccountNumber>33170019251</AccountNumber>
</DetailedSelection>
</ArrayOfDetailedSelection>';
--t_xmlType := sys.xmltype.createxml(p_AdditionRequest);
SELECT InstallationNumber, AccountNumber (
SELECT ExtractValue(column_value, '/DetailedSelection/InstallationNumber') InstallationNumber,
ExtractValue(column_value, '/DetailedSelection/AccountNumber') AccountNumber
FROM TABLE(XMLSequence(XMLTYPE(p_AdditionRequest).EXTRACT('/ArrayOfDetailedSelection/DetailedSelection')))
)
END;
/
【问题讨论】:
标签: c# sql .net oracle oracle11g