我正在尝试更新一个类似于:
的表格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",
};
答案 0 :(得分:4)
默认情况下,ODP.Net按照提供的顺序绑定参数,而不是按名称绑定,并且您在第一个参数codigo
之前指定第二个参数domicilio
。按顺序绑定意味着忽略参数的名称。
更改命令Binding to Name(cmd.BindByName = true
),或按照命令中使用的顺序提供参数。
如果这是一个大项目,我建议创建一个工厂管道方法,用于返回OracleCommand
,它将被设置为BindByName