如下面的代码所示,我想在数据库表(oracle 11)中插入一行,并返回插入行的 String-Value 。
using (OracleCommand cmd = con.CreateCommand()) {
cmd.CommandText = "insert into foo values('foo','bar') returning idString into :lastIdParam";
cmd.Parameters.Add(new OracleParameter("lastIdParam", OracleDbType.Varchar2), ParameterDirection.ReturnValue);
cmd.ExecuteNonQuery(); // returning 1 (insert row successfully)
var result = cmd.Parameters["lastIdParam"].Value.ToString(); // == String.Empty
}
调试显示lastIdParam.Value的值= Empty.String:
我的问题是,我没有将返回字符串输入到我的返回参数,但它在返回整数值时会起作用(如插入id的序列号)。演员问题? ...?
如果直接运行Statement,则填充idString(或者我只是执行returning 'ABC' into :myOutputParameter
如何在插入行后检索字符串?
答案 0 :(得分:3)
您是否尝试过设置参数大小?默认大小为0.
new OracleParameter("lastIdParam", OracleDbType.Varchar2, 128)
答案 1 :(得分:0)
idString
是一个在您的上下文中没有值的表达式,除非它是表中的列名。因此,它被认为是空的。您可以像下面的示例一样更改查询,看看会发生什么。
cmd.CommandText = "insert into foo values('foo','bar') returning hereYouHaveToUseAColumnFromTheFooTable into :lastIdParam";