2015-06-28 85 views
1

我試圖創建的SqlCommand觸發器,我得到的錯誤數據庫觸發器:「關鍵字‘觸發’附近有語法錯誤」。當我在SQL Server中複製相同的查詢時,它正在成功執行。以下是SQLCommand的外觀。如何創建與ADO.NET

command.CommandText = "CREATE TRIGGER tr_Korisnik" + korisnik.KorisnikID + "_FakturaStavka_ForInsert " + 
         "on Korisnik"+korisnik.KorisnikID+"_FakturaStavka " + 
         "FOR INSERT " + 
         "AS " +        
         "BEGIN " + 
         "DECLARE @ID int " + 
         "DECLARE @FakturaID int " + 
         "DECLARE @StavkaBr int " + 
         "SET @ID = (SELECT DokumentID from inserted) " + 
         "SET @FakturaID = (SELECT FakturaID from inserted) " + 
         "UPDATE Korisnik"+korisnik.KorisnikID+"_Fakturi SET BrStavki = BrStavki+1 WHERE DokumentID = @FakturaID " + 
         "SET @StavkaBr = (SELECT Korisnik"+korisnik.KorisnikID+"_Fakturi.BrStavki FROM Korisnik"+korisnik.KorisnikID+"_Fakturi WHERE DokumentID = @FakturaID) " + 
         "UPDATE Korisnik"+korisnik.KorisnikID+"_FakturaStavka SET StavkaBroj = @StavkaBr WHERE DokumentID = @ID END"; 


     command.ExecuteNonQuery(); 

此外,上面我有CREATE TABLE的SQLCommands,他們正常工作。

我試着用[數據庫名稱]之前CREATE TRIGGER,仍然一無所獲。 我刪除了concatinations +「korisnik.KorisnikID」,並取得乾淨的名字,仍然不能執行它

+1

當更新,插入,刪除等DML運行時,觸發器用於自動執行。您不能使用ADO.Net API創建或執行觸發器 –

+0

請查看此鏈接(http://stackoverflow.com/questions/2868704/why-am-i-unable-to-create-a-trigger-使用-my-sqlcommand) –

+1

1)這個觸發器是錯誤的,因爲它假定INSERT語句/操作只會插入一行('SET @ID =(從插入的SELECT DokumentID)')。 2)大多數情況下,創建觸發器是一次性工作:它們不是在運行時創建的。相反,它們是使用SQL Server Manegement Studio創建的。 3)請解釋這個觸發器的目標。 –

回答

0

documentation for ExecuteNonQuery指出

You can use the ExecuteNonQuery to perform catalog operations (for example, querying the structure of a database or creating database objects such as tables), or to change the data in a database without using a DataSet by executing UPDATE, INSERT, or DELETE statements.

哪種類型的印證了我的懷疑:你不能創建觸發器這條路。

如果你想在代碼中創建一個觸發器,使用CLR Trigger

+0

CLR觸發器仍然是一個在Sql語句中執行相同作業Create Trigger的類。 ADO.Net API不能執行像Create Trigger –

+0

@MrinalKamboj這樣的語句:是的,這就是我所說的。 –

1

您可以在數據庫中創建一個存儲過程來創建一個觸發器,然後傳遞正確的參數。使用ado.net調用存儲過程並傳遞參數。