存储过程返回@@identity的问题!!!

BearRui 2004-05-07 09:27:02
有个表Orders,中有个主键OrderID,我想向表Orders插入一行,因为OrderID不能与以前的相同,而且不能为空,所以我就希望通过存储过程自己返回一个不相同的OrderID值。
----------------------------------
下面是我的存储过程:

CREATE PROCEDURE AddOrder
@OrderDate datetime
AS
insert Orders(OrderDate) values(@OrderDate)
return @@identity
GO
-----------------------------------
下面是我程序中的代码。

DataRow OrderRow=ds.Tables["Orders"].NewRow();
OrderRow["OrderID"]=0; //因为不能为空,所以设置为0
OrderRow["OrderDate"]=DateTime.Today;
ds.Tables["Orders"].Rows.Add(OrderRow);

SqlTransaction tsn=Cnn.BeginTransaction();
SqlCommand Cmd=new SqlCommand("AddOrder",Cnn,tsn);
Cmd.CommandType=CommandType.StoredProcedure;

SqlParameter param=Cmd.Parameters.Add("@OrderID",SqlDbType.Int);
param.SourceColumn="OrderID";
param.Direction=ParameterDirection.ReturnValue;

param=Cmd.Parameters.Add("@OrderDate",SqlDbType.DateTime);
param.SourceColumn="OrderDate";
param.SourceVersion=DataRowVersion.Current;

da.InsertCommand=Cmd;
da.Update(ds,"Orders"); //出错行。
-----------------------------------
但老是在最后一行出错,说OrderID字段不能为空,INSERT失败,

请问各位这是什么原因啊,

谢谢!!!
...全文
201 4 打赏 收藏 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
BearRui 2004-05-08
  • 打赏
  • 举报
回复
不好意思,终于解决了,原来不是代码出问题。

而是忘了对数据库进行设置标志列了。

还是谢谢,给分!!!
lxcc 2004-05-07
  • 打赏
  • 举报
回复
param.SourceColumn="OrderID";
param.Direction=ParameterDirection.ReturnValue;

//OrderID要设置为标志列
CREATE PROCEDURE AddOrder
@OrderDate datetime,
@id int
AS
insert Orders(OrderDate) values(@OrderDate)
select @id=@@IDENTITY
GO

SqlParameter param=Cmd.Parameters.Add("@id",SqlDbType.Int);
param.Direction=ParameterDirection.ReturnValue;
BearRui 2004-05-07
  • 打赏
  • 举报
回复
我也试过这样的

CREATE PROCEDURE AddOrder
@OrderID int
@OrderDate datetime
AS
insert Orders(OrderID,OrderDate) values(@OrderID,@OrderDate)
return @@identity
GO

但仍然在最后一句出错,说AddOrder存储过程需要@OrderID参数,而Update方法中没有这个
参数,可我明明SqlParameter param=Cmd.Parameters.Add("@OrderID",SqlDbType.Int);

这不是@OrderID参数吗。不知道什么原因,郁闷。

还请各位赐教!!!
lxcc 2004-05-07
  • 打赏
  • 举报
回复
insert Orders(OrderID,OrderDate) values(@OrderID,@OrderDate)
源码直接下载地址: https://pan.quark.cn/s/a4b39357ea24 【FAST FWR310 无线路由更新程序】是一个专门为FAST FWR310型号无线路由设备设计的固件升级方案,其主要目的在于改善设备的工作表现、纠正已知的系统缺陷或引入全新的操作特性。对无线路由器进行固件更新,实质上是指替换或升级其核心操作系统(即固件),从而使其运行状态得到进一步优化。 在无线路由器的持续使用阶段,用户有时会遭遇若干操作难题,例如网络连接的频繁中断、数据传输速率不高、无线信号覆盖范围有限等情况。针对此类挑战,通过安装新的固件(即刷机包),能够有效应对上述问题,因为新固件或许已经针对这些普遍存在的问题进行了优化处理。不仅如此,固件升级还能开启一些隐藏的功能选项,或者兼容第三方固件,例如OpenWRT,从而让用户能够进行更深入的系统自定义配置及管理。 FWR310 V5.0升级软件20160301是该刷机包的明确版本标识,显示出这是针对FAST FWR310路由器推出的第五代固件,并且发布日期为2016年3月1日。此版本的更新内容可能涵盖以下几个方面: 1. 运行效能的调优:借助于对路由器处理流程与内存分配的改善,能够加快数据交换速率,减少响应时间,从而全面提升网络的工作效能。 2. 安全防护的强化:更新内容中可能融入了对新兴网络安全风险的防御机制,用以保障用户的资料安全。 3. 互操作性的扩展:可能增强了与更多设备及协议的适配能力,比如最新的无线通信标准或设备连接模式。 4. 运行稳定性的提升:修复了可能引发路由器系统崩溃或意外重启的已知故障,延长了设备的稳定运行周期。 5. 新特性集成:或许增添了提升用户体验的功能,例如远程操作控制、家长监管功能、服务质...

111,128

社区成员

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

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

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