2012-08-04 45 views
0

我使用企業庫,我有一個問題:的ExecuteScalar返回值是不適合

string sql = " 
       UPDATE StackOverflow SET UserName = @UserName 
       WHERE Id = @Id 
      "; 

DbCommand cmd = base.Database.GetSqlStringCommand(sql); 

base.Database.AddInParameter(cmd, "Id", DbType.Int32, StackOverflow.Id); 
base.Database.AddInParameter(cmd, "UserName", DbType.Int32, StackOverflow.UserName); 

int val = Convert.ToInt32(base.Database.ExecuteScalar(cmd)); 

Convert.ToInt32(base.Database.ExecuteScalar(cmd)) //returns 0. 

我讀過這篇文章http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommand.executescalar.aspx

文章說:
該函數返回新標識如果插入新行,則爲列值,失敗時爲0。

但我沒有插入到該表 - 我只是想更新,並返回更新行ID。

回答

6

你應該在你的情況下使用ExecuteNonQuery

ExecuteScalar

執行查詢,並返回第一行的結果集中的第一列由查詢返回

的ExecuteNonQuery

執行一個針對連接的Transact-SQL語句並返回受影響的行數

您的查詢不會返回任何內容,因此ExecuteScalar不是正確的方法。
如果您的查詢更新了任何內容,另一端的ExecuteNonQuery將提供正確的信息。

+0

我編輯我的問題解釋得 – 2012-08-04 10:21:28

-1

如果修改SQL語句下面,我想這會給你期望的結果:

string sql = " 
      UPDATE StackOverflow SET UserName = @UserName 
      WHERE Id = @Id 

      RETURN @Id 
     ";