1
我試圖通過Artikelnr
(articleNr
荷蘭語)從我的數據庫中刪除某些行。在存儲過程中刪除失敗時從VBA中調用時會失敗
當我嘗試從訪問中執行我的代碼時,它不會拋出錯誤,但它也不會刪除任何東西。
我在這裏錯過了什麼嗎?
IF EXISTS (SELECT * FROM sys.objects WHERE type = 'P' AND name = 'spVerwijderArtikel')
DROP PROCEDURE spVerwijderArtikel
GO
CREATE PROCEDURE spVerwijderArtikel
(@ArtikelNr integer)
AS
BEGIN Transaction
DELETE FROM artikelprijs
WHERE ArtikelNr = @ArtikelNr
DELETE FROM Artikel
WHERE ArtikelNr = @ArtikelNr
IF @@ERROR <> 0
BEGIN
ROLLBACK
RAISERROR ('Error tijdens het uitvoeren', 16 , 1)
RETURN
END
COMMIT
GO
而且從訪問嘗試執行存儲過程我的代碼:
Private Sub Command2_Click()
Dim conn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim sConnString As String
sConnString = "Provider=SQLOLEDB;Data Source=.\SQLEXPRESS;" & _
"Initial Catalog=KlantArtikelOpdracht;" & _
"Integrated Security=SSPI;"
Set conn = New ADODB.Connection
Set rs = New ADODB.Recordset
conn.Open sConnString
Set rs = conn.Execute("EXEC spVerwijderArtikel'" & TxTArtikelNr & "'")
End Sub
可能有人能幫我解決這個問題?
對於一個整數,我會說你需要'執行(「EXEC spVerwijderArtikel」&TxTArtikelNr)' – Andre
@Andre這並不重要。 SQL將隱式轉換它。 但是,OP確定TxTArtikelNr與命令連接時實際上是一個int嗎?此外,你應該看看使用SQL查詢參數化來避免SQL注入攻擊(這也是一個好習慣) –
你應該看看你的sql中使用try/catch。它不會解決這個問題,但是你的代碼會更清晰。並在bobby表訪問之前參數化您的查詢。 http://bobby-tables.com/ –