如何利用C#获取Oracle的RowId?

hz890 2010-01-05 09:29:53
为什么下面的代码可以把记录插入目标表内,但输出参数oracleRowId却为null呢?这个oracleRowId又应该怎样获取呢?
public string GetOracleRowIdAfterInsertCommand(string OracleConnectionString)
{
string rowId = "";
OracleConnection conn = new OracleConnection(OracleConnectionString);
try
{
OracleCommand cmd = conn.CreateCommand();
cmd.CommandText = "begin ";
cmd.CommandText += "INSERT INTO TABLEFORTEST (COLA,COLB) values ('A','B');";
cmd.CommandText += "end;";
conn.Open();
OracleString oracleRowId;
cmd.ExecuteOracleNonQuery(out oracleRowId);
rowId = oracleRowId.Value;
}
finally
{
conn.Close();
}
return rowId;
}

感谢各位高手!
...全文
180 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
阿非 2010-01-05
  • 打赏
  • 举报
回复
Oracle 中返回当前insert 的rowid 的语法是 return rowid into 变量 么?

我忘记了,现在没环境。

ExecuteOracleNonQuery 是用于执行 增、删、改 操作的时候 使用的,可以返回影响的行数

就是sql 语句影响了多少行。

你想返回rowid 应该使用 ExecuteScalar
hz890 2010-01-05
  • 打赏
  • 举报
回复
如果利用cmd.ExecuteOracleNonQuery(out oracleRowId);无法获取oracleRowId,那么这个方法跟cmd.ExecuteNonQuery();又有啥差别呢?
hz890 2010-01-05
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 sandy945 的回复:]
cmd.CommandText = "begin ";
                cmd.CommandText += "INSERT INTO TABLEFORTEST (COLA,COLB) values ('A','B');";
                cmd.CommandText += "end;";
-------------------------------------------------

cmd.CommandText = "begin ";
                cmd.CommandText += "INSERT INTO TABLEFORTEST (COLA,COLB) values ('A','B'); return rowid;";
                cmd.CommandText += "end;";



[/Quote]
这样做会有下面的异常:
ORA-06550: 第 1 行, 第 61 個欄位:
PLS-00372: 在程序內, RETURN 敘述句中不可含有表示式
ORA-06550: 第 1 行, 第 61 個欄位:
PL/SQL: Statement ignored
阿非 2010-01-05
  • 打赏
  • 举报
回复
cmd.CommandText = "begin ";
cmd.CommandText += "INSERT INTO TABLEFORTEST (COLA,COLB) values ('A','B');";
cmd.CommandText += "end;";
-------------------------------------------------

cmd.CommandText = "begin ";
cmd.CommandText += "INSERT INTO TABLEFORTEST (COLA,COLB) values ('A','B'); return rowid;";
cmd.CommandText += "end;";


hz890 2010-01-05
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 mengxj85 的回复:]
rowId=cmd.ExecuteOracleNonQuery(out oracleRowId);
rowId是指什么?受影响的行数?
ExecuteOracleNonQuery是没有返回值的命令
[/Quote]
rowId是Oracle的行标识!
mengxj85 2010-01-05
  • 打赏
  • 举报
回复
rowId=cmd.ExecuteOracleNonQuery(out oracleRowId);
rowId是指什么?受影响的行数?
ExecuteOracleNonQuery是没有返回值的命令
hz890 2010-01-05
  • 打赏
  • 举报
回复
可MSDN说可以用OracleCommand.ExecuteOracleNonQuery(out oracleRowId)方法直接获取rowId,个人估计这也应该是它与OracleCommand.ExecuteNonQuery()之间最大的区别所在,是OracleCommand特有的方法。
这个方法不应该让人这么失望吧!

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧