关于调用存储过程(SQL SERVER)
INSERT INTO jobs (job_desc,min_lvl,max_lvl)
VALUES ('Accountant',12,125)
SELECT @@IDENTITY AS 'Identity'
如何通过VB程序得到以上存储过程@@identity的值?
问题点数:50、回复次数:12Top
1 楼forever_chang(寒冬月夜裸奔狂)回复于 2002-01-07 15:41:57 得分 0
最好给出源码。Top
2 楼forever_chang(寒冬月夜裸奔狂)回复于 2002-01-07 15:51:09 得分 0
U PTop
3 楼forever_chang(寒冬月夜裸奔狂)回复于 2002-01-07 16:07:30 得分 0
最好是用command对象调用的源码。Top
4 楼gmc007(江西的佬表)回复于 2002-01-07 16:51:49 得分 10
SELECT @@IDENTITY AS 'Identity'
有了这句,就可以通过记录集取值啊!
如果用OUTPUT参数,则要通过COMMAND对象和PARAMETER对象来取值了。
===========
你搜索一下"存储过程",包准吓死你!Top
5 楼zhujiechang(小朱)回复于 2002-01-07 16:54:43 得分 10
首先在存储过程中设置@@identity为返回的参数,在VB中采用ADO连接,使用COMMAND对象,添加参数,设置为返回类型,在调用COMMAND对象执行后,就可从COMMAND的参数中取得@@identity的值。Top
6 楼bgxy(上兵伐谋)回复于 2002-01-07 16:59:20 得分 0
用COMMAND对象返回参数,是存储过程的
基础。Top
7 楼forever_chang(寒冬月夜裸奔狂)回复于 2002-01-07 17:06:12 得分 0
我是这样写的
......
set rs_id=cmmtemp.execute
id=rs_id("identity")
......
cmmtemp.execute 执行都正常
但id=rs_id("identity")好像有问题。
Top
8 楼forever_chang(寒冬月夜裸奔狂)回复于 2002-01-07 17:08:33 得分 0
谁能给我一个完整的例子,谢谢!
作为一个初学者,我将不胜感激!Top
9 楼wzsswz(岌岌荆棘)回复于 2002-01-07 18:09:34 得分 10
forever_chang:
下面两个函数,只要稍做修改,即可用
Public arrary_rpt() As String
Public Function connectstr() As String
connectstr = "Provider=SQLOLEDB.1;Password=super_dingfeng;" _
"Persist Security Info=True;User ID=sa;" -
"Initial Catalog=tfmsdb;Data Source=dfserver"
psword = "super_dingfeng"
end function
Public Function exec_procedure(sql As String, Optional i As Integer = 0) As String
exec_procedure = ""
If sql = "" Then Exit Function
Dim cnn1 As ADODB.Connection
Dim rst1 As ADODB.Recordset
Set cnn1 = New ADODB.Connection
Call cnn1.Open(connectstr())
Set rst1 = New ADODB.Recordset
rst1.ActiveConnection = cnn1
On Error GoTo errorhandle
Call rst1.Open(sql, cnn1, adOpenKeyset, adLockReadOnly)
If i <> 555 And i <> 999 Then
'返回存储过程中指定字段值,或指定变量值。
'555表示不返回结果。
If rst1.RecordCount = -1 Then exec_procedure = CStr(rst1.Fields(i).value)
If rst1.RecordCount = 1 Then exec_procedure = CStr(rst1.Fields(i).value)
End If
If i = 999 Then '返回多个值
If (rst1.RecordCount = 1 Or rst1.RecordCount = -1) And rst1.Fields.Count >= 1 Then
ReDim arrary_rpt(rst1.Fields.Count) As String
Dim k As Integer
For k = 0 To rst1.Fields.Count - 1
arrary_rpt(k) = rst1.Fields(k).value
Next
End If
End If
Set rst1 = Nothing
cnn1.Close
Set cnn1 = Nothing
Exit Function
errorhandle:
Set rst1 = Nothing
Set cnn1 = Nothing
Exit Function
End Function
具体调用如下:
Call exec_procedure("exec this_month_receipt '" + fm.Cbx3.Text + "'", 555)
'exec this_month_receipt为存储过程名,
’'" + fm.Cbx3.Text + "'为存储过程入口 参数, fm为窗体变量。
至于你的具体存储过程,可以这样写:
create procedure kkk as
declare @myIdentity as varchar(30)
INSERT INTO jobs (job_desc,min_lvl,max_lvl)
VALUES ('Accountant',12,125)
set @myIdentity = @@IDENTITY
SELECT @myIdentity
不知是否合你所求。。。。。Top
10 楼crazymens(风)回复于 2002-01-07 21:01:25 得分 10
做成存储过程
Create proc kkk(参数)
as
set nocount on
declare @myIdentity as varchar(30)
INSERT INTO jobs (job_desc,min_lvl,max_lvl)
VALUES ('Accountant',12,125)
set @myIdentity = @@IDENTITY
SELECT @myIdentity
然后再客户端调用就可以了
Top
11 楼crazymens(风)回复于 2002-01-07 21:02:06 得分 0
如果不行的话找我,crazy_dreams@263.netTop
12 楼dadi2001(大地)回复于 2002-01-07 21:07:17 得分 10
dim cn as new adodb.connection
dim rs as new adodb.recordset
rs.open 'usp_yoursp',cn
if not rs.eof then
msgbox rs("Identity")
Top




