2015-06-28 49 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调用存储过程并传递参数。