gpt4 book ai didi

c# - 如何从 C# 中的 ExecuteOracleNonQuery 取回 rowid

转载 作者:行者123 更新时间:2023-11-30 22:49:28 53 4
gpt4 key购买 nike

我在 C# 中使用 ExecuteOracleNonQuery 来使用存储过程将记录插入到我的 Oracle 数据库中,但似乎无法返回 ROWID。

在 C# 中 ...

using (OracleConnection oc= 
new OracleConnection(AppConfiguration.ConnectionString))
{
OracleCommand myCommand = new OracleCommand("PKG_TEST.INSERT", oc);
myCommand.CommandType = CommandType.StoredProcedure;
myCommand.Parameters.AddWithValue("p_Id", allAssets.Id);
myCommand.Parameters.AddWithValue("p_Description", allAssets.Description);
OracleString rowId;
try
{
myConnection.Open();
result = myCommand.ExecuteOracleNonQuery(out rowId);
allAssets.RowId = rowId.ToString();
}
catch(System.Exception ex)
{
Console.WriteLine(ex.StackTrace);
}
finally
{
myConnection.Close();
}
}
return result;

Oracle包中的过程...

PROCEDURE insert (
p_id IN ALL_ASSETS.id%TYPE,
p_description IN ALL_ASSETS.description%TYPE
)
IS
BEGIN
INSERT INTO ALL_ASSETS
(id, description)
VALUES (p_id, p_description);
END insert;

任何人都可以阐明 ROWID 是如何返回的吗?

编辑 - 我现在已将代码更改为如上,但仍然没有 ROWID 返回。此外,只插入了一条记录。

谢谢。

最佳答案

为什么你期望它返回一个 rowid ?您没有要求它返回 DB 端的任何位置,并且过程不会返回 ROWID,也不知道返回哪个。

自动返回受影响行的 ROWID 可以用于 INSERT/UPDATE/MERGE 和 DELETE(尽管我不确定在那种情况下的意义)。

你可以使用INSERT INTO ALL_ASSETS (id, description) VALUES (p_id, p_description) 返回 ROWID INTO v_rowid;

v_rowid 将是 PL/SQL 中的一个变量,您可以将其作为附加输出参数从数据库中返回,或者将过程转换为函数。

关于c# - 如何从 C# 中的 ExecuteOracleNonQuery 取回 rowid,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1110289/

53 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com