ExecuteScalar返回值不合适

Sta*_*ser 0 c# enterprise-library

我使用企业库,我有一个问题:

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.
Run Code Online (Sandbox Code Playgroud)

我已经阅读了这篇文章http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommand.executescalar.aspx

文章说:
如果插入了新行,函数将返回新的Identity列值,失败时返回0.

但我没有插入该表 - 我只想更新并返回更新的行ID.

Ste*_*eve 6

您应该在您的情况下使用ExecuteNonQuery.

的ExecuteScalar

执行查询,并返回查询返回的结果集中第一行的第一列

的ExecuteNonQuery

对连接执行Transact-SQL语句并返回受影响的行数

您的查询不返回任何内容,因此ExecuteScalar不适合使用.
如果您的查询已更新任何内容,则另一方的ExecuteNonQuery将提供正确的信息.