2015-11-06 108 views
0

受影響的行,我的意思是語句運行成功,即。無語法錯誤或主鍵重複等。是否受影響插入行的語句總是1?

檢查ExecuteNonQuery()的返回值是沒有意義的嗎?

SqlCommand cmd= new SqlCommand("INSERT INTO.. ", connection); 
if(cmd.ExecuteNonQuery()!=1) 
    throw new Exception(); 
+0

絕對不是。如果你的insert語句使用select作爲源,那麼它會插入多於一行?還有其他一些方法可以讓插入插入多於一行。 –

回答

2

MSDN

對於UPDATE,INSERT和DELETE語句,返回值是受該命令影響的行數。當插入或更新的表上存在觸發器時,返回值包括受插入或更新操作以及觸發器或觸發器影響的行數影響的行數。對於所有其他類型的語句,返回值爲-1。如果發生回滾,返回值也是-1。

所以不是,數字可以不同於1,特別是如果多個行被插入語句。

+0

觸發器是一個有效的點。即使我插入單行,一些觸發器可能會運行。 – Gqqnbig

0

create table #foo (
    id int primary key, 
    name text 
); 

insert into #foo values 
(1,'a'), 
(2,'b'); 

(2行(一個或多個)受影響)

0

在受影響的行的插入語句數取決於值插入到表中。 如果您輸入兩行的值,那麼兩行將受到影響。

相關問題