繁体   English   中英

使用ODP.net更新表时出现错误ORA-01722

[英]Error ORA-01722 when updating a table using ODP.net

我正在尝试更新看起来像这样的表:

column a VARCHAR2(80)

使用以下功能:

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();
    }
}

但会收到“ ORA-01722无效号码 ”异常。

我尝试

cmd.Parameters.Add("p_domicilio", OracleDbType.Varchar2, ParameterDirection.Input).Value = domicilio;

cmd.Parameters.Add("p_domicilio", OracleDbType.Varchar2, domicilio, ParameterDirection.Input);

    var pDomicilio = new Oracle.DataAccess.Client.OracleParameter()
    {
        DbType = DbType.String,
        Value = domicilio,
        Direction = ParameterDirection.Input,
        OracleDbType = Oracle.DataAccess.Client.OracleDbType.Varchar2,
        ParameterName = "p_domicilio",
    };

默认情况下,通过ODP.Net订单绑定参数向他们提供,而不是由名称,是否指定了第二个参数codigo第一个参数之前domicilio 按顺序绑定意味着将忽略参数名称。

将命令Binding更改为Namecmd.BindByName = true ),或者以与命令中使用的顺序相同的顺序提供参数。

如果这是一个大项目,我建议创建一个工厂管道方法来返回OracleCommand ,该方法将设置为BindByName

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM