ExecuteScalar返回的值不合适
本文关键字:不合适 返回 ExecuteScalar | 更新日期: 2024-09-25 23:56:05
我使用企业库,但我有一个问题:
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。
您应该在您的案例中使用ExecuteNonQuery。
ExecuteScalar
执行查询,并返回查询返回的结果集中第一行的第一列
执行非查询
对连接执行Transact-SQL语句,并返回受影响的行数
您的查询没有返回任何内容,因此ExecuteScalar
不是正确的方法
如果您的查询更新了任何内容,则另一侧的ExecuteNonQuery将提供正确的信息。
如果您将SQL语句修改为以下内容,我认为这将给您带来您期望的结果:
string sql = "
UPDATE StackOverflow SET UserName = @UserName
WHERE Id = @Id
RETURN @Id
";