[英]Error ORA-01722 when updating a table using ODP.net
I'm trying update a table that looks something like: 我正在尝试更新看起来像这样的表:
column a VARCHAR2(80)
Using the following function: 使用以下功能:
sqlString = "UPDATE TABLE SET domicilio = :p_domicilio WHERE codigo = :p_codigo";
string sqlCommandtext = sqlString;
using (var cn = new OracleConnection("DATA SOURCE=XXX..."))
{
cn.Open();
using (OracleCommand commandInt32 = cn.CreateCommand())
{
cmd.CommandText = sqlCommandtext;
cmd.Parameters.Add("p_codigo", OracleDbType.Int32, 34620, ParameterDirection.Input);
cmd.Parameters.Add("p_domicilio", OracleDbType.Varchar2, ParameterDirection.Input).Value = domicilio;
//cmd.Parameters.Add("p_domicilio", OracleDbType.Varchar2, domicilio, ParameterDirection.Input);
cmd.ExecuteNonQuery();
}
}
but get " ORA-01722 invalid number " exception. 但会收到“ ORA-01722无效号码 ”异常。
I try 我尝试
cmd.Parameters.Add("p_domicilio", OracleDbType.Varchar2, ParameterDirection.Input).Value = domicilio;
and 和
cmd.Parameters.Add("p_domicilio", OracleDbType.Varchar2, domicilio, ParameterDirection.Input);
and 和
var pDomicilio = new Oracle.DataAccess.Client.OracleParameter()
{
DbType = DbType.String,
Value = domicilio,
Direction = ParameterDirection.Input,
OracleDbType = Oracle.DataAccess.Client.OracleDbType.Varchar2,
ParameterName = "p_domicilio",
};
By default, ODP.Net binds parameters by the Order they are provided, not by name, and you are specifying the second parameter codigo
before the first parameter domicilio
. 默认情况下,通过ODP.Net订单绑定参数向他们提供,而不是由名称,是否指定了第二个参数
codigo
第一个参数之前domicilio
。 Bind by order means the name of the parameter is ignored. 按顺序绑定意味着将忽略参数名称。
Either change the command Binding to Name ( cmd.BindByName = true
), or provide the parameters in the same order that they are used in your command. 将命令Binding更改为Name (
cmd.BindByName = true
),或者以与命令中使用的顺序相同的顺序提供参数。
If this is a big project, I would suggest creating a factory plumbing method for returning OracleCommand
s which will be set to BindByName
如果这是一个大项目,我建议创建一个工厂管道方法来返回
OracleCommand
,该方法将设置为BindByName
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.