2017-02-23 35 views
0

我在visual 2015中使用數據庫創建了一個表,並且在表中我有名稱,n1,n2和avg。我做了一個帶有3個文本框的插入按鈕,其中插入了我的名字,數字1和數字2,當我按下按鈕時,我想將它們保存在表格中。如果我使用4個文本框(一個用於平均值),它可以工作,但我想使用觸發器。所以..我創建了一個觸發>在c中使用觸發器時出錯#

CREATE TRIGGER [Trigger] 
ON [dbo].[Table1] 
FOR DELETE, INSERT, UPDATE 
AS 
BEGIN 
    UPDATE Table1 
    SET avg = (N1+N2)/2 
END 

,這裏是我的插入串

string ins = "insert into Table1 values ('"; ins += textBox1.Text + "','" + textBox2.Text + "','" + textBox3.Text + "')"; 

,我得到這個錯誤..

列名或所提供值不匹配表的數量定義。

我不知道該怎麼辦:(

+1

什麼是您插入語句/存儲過程是什麼樣子?這是問題,而不是觸發器。 – ganders

+0

此外,我會在觸發器中的update語句中添加一個where子句,以便更新已更新/插入的名稱的記錄,而不是更新表中的EVERY記錄。 – ganders

+0

string ins =「insert into Table1 values('」; ins + = textBox1.Text +「','」+ textBox2.Text +「','」+ textBox3.Text +「')」; @ganders –

回答

0

好吧,我仍然不認爲我們擁有所有的信息,但我給它一條縫......

錯誤消息是從插入語句,而不是從觸發。

爲了您的插入,我會格式化,所以你具體說明哪些值/列將被插入到表。

看來好像你的平均列是一個不可空的字段,沒有默認約束你試圖只插入3個值,它想要4,因爲它必須有4(不可爲空)。這就是它拋出錯誤的原因。

我想構建你的isnert這樣的:

insert 
into Table (Col1, Col2, Col3) 
values (val1, val2, val3) 

然後,添加一個默認約束[然後通過觸發更新],OR,使平均列空的,所以它可以再次然後通過更新觸發。

0

我敢打賭,你有一個主鍵列或另一列,你沒有告訴我們。

可以使主鍵列自動遞增,或使每列允許空值或給每列設置默認值。

同時查看SQL注入,因爲您的插入語句容易受到攻擊。

還擁有你的語法問題:

string ins = "insert into Table1 values ('"; ins += textBox1.Text + "','" + textBox2.Text + "','" + textBox3.Text + "')"; 

應該

string ins = "insert into Table1 values ('" + textBox1.Text + "','" + textBox2.Text + "','" + textBox3.Text + "')";