OracleCommand的ExecuteOracleNonQuery(out oracleRowId)方法该怎样用,为什么得不到oracleRowId的值?

hz890 2010-01-11 07:50:07
代码如下:
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;
}

INSERT命令执行成功,记录已插入表中,但是却无法获得RowId,(经调试RowId为null)不知是何原因?
OracleCommand的ExecuteOracleNonQuery(out oracleRowId)方法不应该这么令人失望吧,但是到底该怎样用呢?
请各位高手指点,多谢!
...全文
521 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
hz890 2010-01-13
  • 打赏
  • 举报
回复
连续发问过两次都是无果而终!
hz890 2010-01-13
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 qldsrx 的回复:]
我对楼主的SQL语句很感兴趣,试试把“begin”和“end”以及insert语句最后的封号去掉执行下看看,我对那个rowId从不关心,所以没有用过那个方法去更新数据库。

其实计算那个方法无法获取rowId,也可以自己写个查询来获取的啊。在你插入后执行这句,如果是返回唯一值,rowid就只有一个,否则就是多个rowid:
SQL codeselect rowidfrom TABLEFORTESTwhere COLA='A'and COLB='B'
[/Quote]
有没有begin...end以及分号并非问题关键,我在11楼已经说过“用ExecuteNonQuery()方法是可以的得到RowId的,但是稍显繁琐”,我的目的是要了解如何通过ExecuteOracleNonQuery(out rowid)方法获取RowId,看来没有人愿意给出合适的答案,那我也只能无满意结贴了!
hz890 2010-01-12
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 wuyq11 的回复:]
ADO.NET 访问 Oracle
[/Quote]
不好意思这是一个链接,当时没有看出来!

但是根据该链接所提供的资料是通过建立存储过程来做的,需要这样吗?
直接用PL/SQL语句执行插入命令就不可以获取RowId吗?
cena_jin 2010-01-12
  • 打赏
  • 举报
回复
吼吼!!
hz890 2010-01-12
  • 打赏
  • 举报
回复
没有人能解决吗?
hz890 2010-01-12
  • 打赏
  • 举报
回复
不知各位有没有解决办法?当然前提是要采用OracleCommand的ExecuteOracleNonQuery(out oracleRowId);方法;
因为我也知道利用ExecuteNonQuery()方法是可以的得到RowId的,但是稍显繁琐,所以我还是想用ExecuteOracleNonQuery()方法获取输出的RowId.
qldsrx 2010-01-12
  • 打赏
  • 举报
回复
我对楼主的SQL语句很感兴趣,试试把“begin”和“end”以及insert语句最后的封号去掉执行下看看,我对那个rowId从不关心,所以没有用过那个方法去更新数据库。

其实计算那个方法无法获取rowId,也可以自己写个查询来获取的啊。在你插入后执行这句,如果是返回唯一值,rowid就只有一个,否则就是多个rowid:
select rowid from TABLEFORTEST where COLA = 'A' and COLB='B'
hz890 2010-01-12
  • 打赏
  • 举报
回复
唉,又是无满意结贴。
hz890 2010-01-11
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 wiki14 的回复:]
cmd.Parameters.Add("oracleRowId", OracleType.Number).Direction = ParameterDirection.Output;
rowId = cmd.Parameters["oracleRowId"].Value;
[/Quote]
报错:ORA-01036: 變數名稱?號碼無效(繁体中文)
我总觉得不应该还需要额外添加参数,因为这个方法唯一的参数就是一个输出的rowid
wiki14 2010-01-11
  • 打赏
  • 举报
回复
cmd.Parameters.Add("oracleRowId", OracleType.Number).Direction = ParameterDirection.Output;
rowId = cmd.Parameters["oracleRowId"].Value;
hz890 2010-01-11
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 wiki14 的回复:]
C# codeint rowId= cmd.ExecuteOracleNonQuery(out oracleRowId);
[/Quote]
晕!
这样做,rowId的值是受影响的行数(int),而Oracle的RowId在.NET端是一个OracleString类型的参数,我现在就是需要获取这个OracleString类型的参数
hz890 2010-01-11
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 wuyq11 的回复:]
ADO.NET 访问 Oracle
[/Quote]
可有具体的解决办法?
wiki14 2010-01-11
  • 打赏
  • 举报
回复

int rowId = cmd.ExecuteOracleNonQuery(out oracleRowId);
hz890 2010-01-11
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 wiki14 的回复:]
OracleCommand.ExecuteOracleNonQuery 方法:
针对 Connection 执行 SQL 语句并返回受影响的行数。
C# codepublicint ExecuteOracleNonQuery (out OracleString rowid
)

不知道是不是我理解有误。
[/Quote]
返回受影响的行数没有问题,但是为何得不到输出参数rowid的值,如果得不到这个参数值,还不如用ExecuteNonQuery()方法呢!
wiki14 2010-01-11
  • 打赏
  • 举报
回复
OracleCommand.ExecuteOracleNonQuery 方法:
针对 Connection 执行 SQL 语句并返回受影响的行数。

public int ExecuteOracleNonQuery (
out OracleString rowid
)


不知道是不是我理解有误。
wuyq11 2010-01-11
  • 打赏
  • 举报
回复
hz890 2010-01-11
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 wiki14 的回复:]
跟你的取值方式有问题吧?
[/Quote]
取值方式有何问题?
wiki14 2010-01-11
  • 打赏
  • 举报
回复
跟你的取值方式有问题吧?
内容概要:本文档详细介绍了“南方数码房地一体内外业软件”的操作流程,涵盖从数据准备、外业调查、内外业数据对接,到内业数据处理与成果输出的完整工作链。主要包括调查底图制作(支持DWG、MDB、SHP及倾斜三维模型等多种数据源)、导出外业IDB工程文件、平板端外业调查(宗地与房屋核实、电子签章表确认、照片导出)、内外业数据对接(DB与照片数据导入),以及内业的宗地信息完善、界址属性设置、自然幢生成、房屋面积计算、户属性录入,并最终输出宗地图、房产分户图、各类报表及MDB数据库等成果。; 适合人群:从事农村房地一体权籍调查的测绘、不动产登记及相关地理信息行业的内业处理人员、外业调查员和技术管理人员,需具备基础GIS或CAD操作能力; 使用场景及目标:①指导用户系统完成从原始数据到不动产登记成果的全流程作业;②实现外业调查数据高效采集与内业自动化处理衔接,提升房地一体确权登记工作的标准化与效率; 阅读建议:建议结合实际项目按章节顺序操作,重点关注数据格式转换、IDB工程交互逻辑及成果图输出设置,配合软件界面逐步实践,确保各环节数据完整性与准确性。
内容概要:本文围绕“面向高精度电流控制的PMSM多参数PSO辨识模型研究”,结合Simulink仿真实现,系统探讨了在高性能电机控制背景下,如何利用粒子群优化算法(PSO)对永磁同步电机(PMSM)电流环的关键参数进行多参数协同辨识。研究通过建立PMSM的精确动态数学模型,设计基于PSO的参数辨识框架,实现了对电机电感、电阻、反电动势常数等核心参数的高效在线或离线辨识,有效提升了电流控制的精度与系统鲁棒性。文中详细阐述了PSO算法的实现机制,包括适应度函数构造、参数编码策略与收敛判据,并在Simulink中构建了完整的联合仿真平台,通过大量仿真实验验证了该方法相较于传统辨识技术在准确性、稳定性和适应性方面的显著优势,为高动态性能电机驱动系统的参数获取提供了可靠的技术路径。; 适合人群:自动化、电气工程、控制科学与工程等相关专业的研究生、科研人员及从事高性能电机驱动系统开发的工程师。; 使用场景及目标:①应用于高端制造、新能源汽车、航空航天等领域中对电流控制精度要求极高的PMSM控制系统开发;②作为智能优化算法(如PSO)在电机参数辨识领域应用的典型案例,服务于教学演示与学术研究;③为后续开展自适应控制、智能容错控制及多物理场耦合建模等前沿课题提供坚实的参数辨识基础和技术参考。; 阅读建议:读者应具备扎实的电机控制理论基础(如FOC矢量控制、现代控制理论)以及熟练的MATLAB/Simulink仿真能力,建议在学习过程中结合文中的仿真模型,动手复现PSO参数辨识的完整流程,深入分析算法参数设置对辨识结果的影响,从而全面掌握其工程应用精髓。
内容概要:本文提出了一种基于粒子群优化算法(PSO)的配电网光伏储能双层优化配置模型,以IEEE33节点系统为标准算例,实现光伏发电单元与储能系统的协同选址与定容优化。该模型采用双层架构设计,上层以投资成本、运行经济性及网络损耗最小为目标优化设备配置方案,下层通过潮流计算评估系统在不同负荷场景下的运行性能,综合考虑电压稳定性、供电可靠性及可再生能源消纳能力,最终通过Matlab编程实现完整求解流程,为高渗透率分布式电源接入背景下的配电网规划提供了有效的技术支撑。; 适合人群:具备电力系统分析基础和Matlab编程能力的研究生、高校科研人员及从事新能源并网、智能配电网规划与优化的工程技术人员。; 使用场景及目标:①研究含高比例光伏接入的配电网规划与运行协同优化问题;②掌握双层优化建模方法与粒子群算法在复杂电力系统问题中的应用技巧;③为实际工程中分布式光伏与储能系统的科学选址与容量配置提供理论依据与仿真验证平台。; 阅读建议:建议读者结合Matlab代码深入理解双层迭代求解机制,重点关注算法收敛性分析、参数敏感性测试,并可通过更换初始种群、调整权重因子或引入其他标准测试系统(如IEEE69节点)进行对比实验,进一步验证所提模型的普适性与鲁棒性。

111,129

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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