Neden ısrarla kayıtseti kullanıyorsun?
İşte sana "Return Value" döndürebileceğin kodlar:
Senin sp'nin uyarlanmışı :
Kod:
CREATE PROCEDURE [dbo].[frnDelete]
@fid int
AS
BEGIN
IF EXISTS(SELECT * FROM Furniture WHERE upperID=@fid)
BEGIN
RETURN 1
END
ELSE
BEGIN
DELETE FROM Furniture WHERE id=@fid
RETURN 0
END
END
Aynı sp aşağıdaki gibi daha kısa ve şık yazılabilir :
Kod:
CREATE PROCEDURE [dbo].[frnDelete]
(
@fid int
)
AS
BEGIN
IF NOT EXISTS(SELECT * FROM Furniture WHERE upperID=@fid)
BEGIN
DELETE FROM Furniture WHERE id=@fid
RETURN 0
END
RETURN 1
END
(not : ASP ile kod yazmayalı asırlar oldu, aşağı yukarı şöyle hatırlıyorum.)
Kod:
dim con, cmd, result, fid
fid = 837932
set con = server.createobject("adodb.connection")
connect.open ".....connection string....."
set cmd = server.createobject("adodb.command")
set cmd.activeconnection = con
cmd.CommandType = adCmdStoredProc
cmd.CommandText = "frnDelete"
cmd.Parameters.Append cmd.CreateParameter("@result", adInteger, adParamReturnValue)
cmd.Parameters.Append cmd.CreateParameter("@fid", adInteger, adParamInput)
cmd.Parameters("@fid") = fid
cmd.Execute()
result = cmd.Parameters("@result ")
set cmd = nothing
con.close()
set con = nothing
SET NOCOUNT ON|OFF'a gelince;
bu parametrenin OFF olması durumunda, SQL server, kod içinde yer alan SQL cümlelerinin etkilediği kayıtların sayısını istemciye döndürür. Mesele senin örneğinde DELETE işlemi yapıldığı çin "1 row(s) affected" gibi bir mesajı istemciye gönderecektir ve bu da istediğin gibi sonucu alamamana yol açmaktadır. SET NOCOUNT ON kullanımı "best practice" olarak kabul edilir.