2

正如下面的代码所示,我想在数据库表(oracle 11)中插入一行并返回插入行的字符串值

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 的 value = Empty.String: 在此处输入图像描述

我的问题是,我没有将返回字符串放入我的返回参数中,但它会在返回一个整数值时起作用(如插入 id 的序列号)。选角问题?...?

如果直接运行语句,则 idString 被填充(或者如果我只是做类似的事情returning 'ABC' into :myOutputParameter

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

4

2 回答 2

3

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

new OracleParameter("lastIdParam", OracleDbType.Varchar2, 128)
于 2012-12-21T16:18:51.347 回答
0

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

cmd.CommandText = "insert into foo values('foo','bar') returning hereYouHaveToUseAColumnFromTheFooTable into :lastIdParam";
于 2012-12-21T16:22:07.967 回答