不知道为什么它会在退出数据库时删除,除非它没有提交事务,但不确定你将如何实际执行此操作,可能是表的连接字符串中的某些内容。
一个非常简单的存储过程路由如下所示:
创建您的存储过程:
CREATE PROCEDURE usp_SimpleUpdateExample
-- Add the parameters for the stored procedure here
@NewValue int,
@WhereCriteria1 int,
@WhereCriteria2 varchar(10),
@Ret int OUTPUT
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
-- Insert statements for procedure here
BEGIN TRY
BEGIN TRANSACTION
UPDATE tbl_YourTable
SET UpdatedField = @NewValue
WHERE FirstCriteriaField = @WhereCriteria1
And SecondCriteriaField = @WhereCriteria2
SET @Ret = @@ROWCOUNT
COMMIT TRANSACTION
END TRY
BEGIN CATCH
IF @@trancount > 0 ROLLBACK TRANSACTION
SET @Ret = -1
END CATCH
END
创建一个函数来调用过程:
Function UpdateData(iNewValue As Integer, iCrtieria1 As Integer, _
strCriteria2 As String) As Long
On Error GoTo Err_Handle
Set cnn = CreateObject("ADODB.Connection")
cnn.ConnectionString = "DRIVER={SQL Server};SERVER=ServerName;" _
& "DATABASE=DatabaseName;Trusted_Connection=Yes"
cnn.Open cnn.ConnectionString
Set cmd = CreateObject("ADODB.Command")
cmd.ActiveConnection = cnn
cmd.CommandType = adCmdStoredProc
cmd.CommandText = "dbo.usp_SimpleUpdateExample"
cmd.CommandTimeout = 0
Set param = cmd.CreateParameter("@NewValue", adInteger, _
adParamInput, , iNewValue)
cmd.Parameters.Append param
Set param = cmd.CreateParameter("@WhereCriteria1", 20, _
adParamInput, , iCrtieria1)
cmd.Parameters.Append param
Set param = cmd.CreateParameter("@WhereCriteria2", adVarChar, _
adParamInput, , strCriteria2)
cmd.Parameters.Append param
Set param = cmd.CreateParameter("@Ret", adInteger, adParamOutput)
cmd.Parameters.Append param
cmd.Execute
UpdateData = cmd.Parameters("@Ret")
Exit_Proc:
Set cnn = Nothing
Set cmd = Nothing
Set param = Nothing
Exit Function
Err_Handle:
' msgbox with details or whatever error handle you use
AllocatePymt = -1
GoTo Exit_Proc
End Function
存储过程(以及函数)返回更新的行数(或使用INSERT 新行数),如果发生错误则返回-1;调用它会是这样的:
l = UpdateData(52,1234,"FooBar")
SelectCase l
Case Is > 0
msgbox "Updated " & l & " rows"
Case 0
Msgbox "No rows updated, but no error"
Case Else
Msgbox "An error occurred, the transaction was rolled back"
End Select
这一切都适用于Access 2007 和SQL Server 2005,这是我可用的全部。