请教:有关得到插入、查询记录返回值的问题

在帮助中说:

ExecuteScalar
“返回值
结果集中第一行的第一列。”

现在对于“select count(*) as NumberOfRegions from region”这样的语句很有效果。

我想在插入时候返回一个值,如下面的语句我想在订单表orders插入新行,并返回这行的orderID,结果返回0(表示没有返回值!!!,没有错误的,因为在基础表orders中能看到新增加的记录,orderID是10801)
MyCommand.CommandText = "insert into orders (orderdate) values ('2004-7-23')"
MyCommand.CommandType = CommandType.Text
Dim orderId As Integer = CType(MyCommand.ExecuteScalar(), Integer)
msgbox(orderid)

但用存储过程能正确返回orderID,如下
CREATE PROCEDURE NewOrder
@orderdate DateTime
AS
insert into orders orderdate) values (@orderDate)
return (@@identity)
GO

MyCommand.CommandText = "NewOrder"
MyCommand.CommandType = CommandType.StoredProcedure
'加参数代码省略……
MyCommand.ExecuteScalar()
Dim orderId As Integer = CType(MyCommand.Parameters("return").Value, Integer)
msgbox(orderId)

虽然用存储过程也是个解决方法,但是当数据是ACCESS数据库(常用)的时候,就无能为力了呀,因为ACCESS没有存储过程(??)
所以我猜想呢,
MyCommand.CommandText = "insert into……"
MyCommand.CommandType = CommandType.Text
MyCommand.ExecuteScalar
这样的组合是没有返回值的,对不对?
可是我还就想在这种情况下取得返回值,有什么办法?
---------------------------------------------------------------

哈,没看下去你的东东,太长了。原来是这么回事。
没办法。插进去后再找回那个ID吧。
---------------------------------------------------------------

SqlInsertCommand1.CommandText = "INSERT INTO 个人简历(人员ID, 起始日期, 终止日期, 说明) VALUES (@人员ID, @起始日期, @终止日期, @说明); SELECT 简历ID, 人员ID, 起始日期, 终止日期, 说明 FROM 个人简历 WHERE (简历ID = @@IDENTITY)"
---------------------------------------------------------------

支持楼上的,

Published At
Categories with Web编程
Tagged with
comments powered by Disqus