我不确定如何解决此错误。
我有一个班级
public class MyClass
{
public OracleDecimal ID { get; set; }
public string FIELD1 { get; set; }
public string FIELD2 { get; set; }
public OracleDate FIELD3 { get; set; }
}
我建立了一个List,然后打电话给SP。
OracleParameter p_ID = new OracleParameter("p_ID", OracleDbType.Decimal, records.Select(x => x.ID).ToArray(), ParameterDirection.Input);
OracleParameter p_FIELD1 = new OracleParameter("p_FIELD1", OracleDbType.Varchar2, records.Select(x => x.FIELD1).ToArray(), ParameterDirection.Input);
OracleParameter p_FIELD2 = new OracleParameter("p_FIELD2", OracleDbType.Varchar2, records.Select(x => x.FIELD2).ToArray(), ParameterDirection.Input);
OracleParameter p_FIELD3 = new OracleParameter("p_FIELD3", OracleDbType.Date, records.Select(x => x.FIELD3).ToArray(), ParameterDirection.Input);
var result = context.Database.ExecuteSqlCommand("BEGIN MY_PACKAGE.MY_PROC(:p_ID, :p_FIELD1, :p_FIELD2, :p_FIELD3); END;", p_ID, p_FIELD1, p_FIELD2, p_FIELD3);
但是我收到了错误 无法转换类型' Oracle.ManagedDataAccess.Types.OracleDecimal []'输入' System.IConvertible'。
我不确定如何解决此错误。
当我创建我的列表时,我有以下内容:
OracleDate myDate = new OracleDate(DateTime.Now);
var myRecord = new MyClass
{
ID = ((OracleDecimal)ID).Value,
FIELD1 = field1,
FIELD2 = field2,
FIELD3 = myDate
};
任何建议都将不胜感激。
答案 0 :(得分:0)
records.Select(x => ...)
将返回值列表,而不是单个值。
您应该围绕foreach
循环包装代码:
foreach(var record in records)
{
OracleParameter p_ID = new OracleParameter("p_ID", OracleDbType.Decimal, record.Id, ParameterDirection.Input);
OracleParameter p_FIELD1 = new OracleParameter("p_FIELD1", OracleDbType.Varchar2, record.FIELD1, ParameterDirection.Input);
OracleParameter p_FIELD2 = new OracleParameter("p_FIELD2", OracleDbType.Varchar2, records.FIELD2, ParameterDirection.Input);
OracleParameter p_FIELD3 = new OracleParameter("p_FIELD3", OracleDbType.Date, records.FIELD3, ParameterDirection.Input);
var result = context.Database.ExecuteSqlCommand("BEGIN MY_PACKAGE.MY_PROC(:p_ID, :p_FIELD1, :p_FIELD2, :p_FIELD3); END;", p_ID, p_FIELD1, p_FIELD2, p_FIELD3);
}
答案 1 :(得分:0)
您的参数构造代码正在提供一个数组作为参数的值。考虑这一行:
OracleParameter p_ID = new OracleParameter("p_ID", OracleDbType.Decimal, records.Select(x => x.ID).ToArray(), ParameterDirection.Input);
对ToArray()
的调用会立即获取结果 - 即使只有一个 - 并将其转换为数组。这与参数类型不同,因此执行转换的尝试失败。如果您确定只返回一条记录,请为该呼叫提供一个数组索引。