我不知道ManagedDataAccess缺少什么来抱怨“不支持的列数据类型”。我喜欢错误如何不指出是什么类型或什么“列”给它带来了悲伤。有人可以查看下面的代码,让我知道我错过了什么吗?非常感谢!
桌子
from sshtunnel import SSHTunnelForwarder
import paramiko
with SSHTunnelForwarder(
(proxyhost, 22),
ssh_username=ssh_username,
ssh_pkey=paramiko.agent.Agent().get_keys(),
remote_bind_address=('127.0.0.1', 3306),
) as tunnel:
pass
类型
CREATE TABLE "PORTAL_OPS"."SHAPE"
(
"SIDES" NUMBER(1,0) NOT NULL ENABLE
)
班级
create or replace type shapeudt as object
(
sides number(1,0)
)
调用UDT进行操作:
[OracleCustomTypeMappingAttribute("PORTAL_OPS.SHAPEUDT")]
public class Shape : IOracleCustomType, IOracleCustomTypeFactory
{
[OracleObjectMappingAttribute("SIDES")]
public Int32 sides;
public void FromCustomObject(OracleConnection con, IntPtr pUdt)
{
OracleUdt.SetValue(con, pUdt, "SIDES", sides);
}
public void ToCustomObject(OracleConnection con, IntPtr pUdt)
{
sides = (int)OracleUdt.GetValue(con, pUdt, "SIDES");
}
public IOracleCustomType CreateObject()
{
return new Shape();
}
}
答案 0 :(得分:0)
解决了!
原因: 没有使用正确的OracleDbType。对于UDT,在定义OracleParameter时必须使用OracleDbType.Object。如果您像我一样,请尝试成为Oracle托管驱动程序的粉丝。好吧,您是SOL,因为从19.6版开始,Oracle托管数据访问Nuget仍然不支持OracleDbType.Object。
解决方案: 切换到非托管驱动程序。是的,您必须使用托管驱动程序进行分拆。 从here下移至VS工具。是的,您需要使用由Oracle Universal Installer(OUI)安装的版本。