使用 c# 和 OCI 中的 RETURNING INTO 子句在 Oracle 上创建行 ID 的正确方法是啥:
Posted
技术标签:
【中文标题】使用 c# 和 OCI 中的 RETURNING INTO 子句在 Oracle 上创建行 ID 的正确方法是啥:【英文标题】:What is the correct way to get created row Id on Oracle using the RETURNING INTO clause in c# and OCI:使用 c# 和 OCI 中的 RETURNING INTO 子句在 Oracle 上创建行 ID 的正确方法是什么: 【发布时间】:2014-04-29 02:41:04 【问题描述】:我有以下语句来插入行并获取插入的 Id 或行:
int returnId;
string sql = "INSERT INTO table_name (a, b, c) VALUES (1, 2, 3) RETURNING ID INTO :returnId;";
OracleCommand command = conn.CreateCommand();
command.CommandText = sql;
Console.WriteLine ("The row created has a Id = " + returnId);
这不起作用。我还尝试了以下变体:
string sql = "INSERT INTO table_name (a, b, c) VALUES (1, 2, 3) RETURNING ID;";
OracleCommand command = conn.CreateCommand();
command.CommandText = sql;
int rowsUpdated = command.ExecuteNonQuery();
if (rowsUpdated != 1)
return;
OracleDataReader reader = command.ExecuteReader();
while (reader.Read())
string id = (string)reader["ID"];
Console.WriteLine ("The row created has a Id = " + returnId);
这将2行插入数据库,阅读器为空。
那么,以编程方式使用 RETURNING INTO 子句获取创建的行 ID 的正确方法是什么。
感谢您的帮助。
【问题讨论】:
How to get the generated id from an inserted row using ExecuteScalar? 的可能重复项 【参考方案1】:您的返回子句很好,但您的 C# 代码全错了。您需要使用 Parameters 属性 - 在此处阅读:http://msdn.microsoft.com/en-us/library/system.data.oracleclient.oraclecommand.parameters%28v=vs.110%29.aspx
例如:
command.Parameters.Add("returnId", OracleType.Number).Direction = ParameterDirection.Output;
执行查询后检查command.Parameters["returnId"].Value
【讨论】:
我正在尝试更改代码,这是一条线索,但不起作用... OracleType 是 OracleDbType(int32 或十进制),我找不到 ParameterDirection.Output...以上是关于使用 c# 和 OCI 中的 RETURNING INTO 子句在 Oracle 上创建行 ID 的正确方法是啥:的主要内容,如果未能解决你的问题,请参考以下文章
Oracle 是不是支持 SQL 语句中的 RETURNING?
PostgreSQL v12.6 中的 PLpgSQL INSERT-RETURNING-INTO 错误?
使用 RETURNING INTO 子句和 BULK COLLECT 时如何返回整行
Java JDBC 如何使用 RETURNING 语句处理更新查询