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.
您应该在您的情况下使用ExecuteNonQuery.
执行查询,并返回查询返回的结果集中第一行的第一列
的ExecuteNonQuery
对连接执行Transact-SQL语句并返回受影响的行数
您的查询不返回任何内容,因此ExecuteScalar不适合使用.
如果您的查询已更新任何内容,则另一方的ExecuteNonQuery将提供正确的信息.
| 归档时间: |
|
| 查看次数: |
1523 次 |
| 最近记录: |