使用ExecuteNonQuery时如何从OracleParameter对象获取字符串值

时间:2012-12-21 15:40:21

标签: c# oracle11g odp.net

如下面的代码所示,我想在数据库表(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: enter image description here

我的问题是,我没有将返回字符串输入到我的返回参数,但它在返回整数值时会起作用(如插入id的序列号)。演员问题? ...?

如果直接运行Statement,则填充idString(或者我只是执行returning 'ABC' into :myOutputParameter

之类的操作

如何在插入行后检索字符串?

2 个答案:

答案 0 :(得分:3)

您是否尝试过设置参数大小?默认大小为0.

new OracleParameter("lastIdParam", OracleDbType.Varchar2, 128)

答案 1 :(得分:0)

idString是一个在您的上下文中没有值的表达式,除非它是表中的列名。因此,它被认为是空的。您可以像下面的示例一样更改查询,看看会发生什么。

cmd.CommandText = "insert into foo values('foo','bar') returning hereYouHaveToUseAColumnFromTheFooTable into :lastIdParam";