我可以使用ExecuteScalar进行更新吗?

时间:2010-09-13 10:43:25

标签: c# sql-server

我正在使用SQL Server 2005和C#。我想在将记录插入数据库时​​获取主键值。

为此我有一个C#方法,我在其中插入和更新记录。我正在使用ExecuteScalar方法进行插入和更新。

插入成功,但更新不成功。如何使用ExecuteScalar获取更新的主键?

2 个答案:

答案 0 :(得分:3)

通常,ExecuteScalar方法用于返回至少一个数据字段的查询(例如,SELECT查询的结果)。如果您只想要执行某些操作,则应使用ExecuteNonQuery方法。

即使使用ExecuteNonQuery方法,您仍然可以在函数完成后读取参数值。例如,您的命令可能类似于:

INSERT INTO TableName(someFields) VALUES (someValues)
SET @Id = SCOPE_IDENTITY()

如果您使用自动增量密钥或

SET @Id = newid()
INSERT INTO (ID, someFields) VALUES (@id, someValues)

如果您使用uniqueidentifier作为密钥。

之后你可以在命令中添加输出@Id参数,调用ExecuteNonQuery然后读取参数中的值。

答案 1 :(得分:0)

使用ExecuteScalar,您应该能够执行任何查询(包括插入/更新),但是,通常使用ExecuteNonQuery进行更新操作更有意义,您不会期望任何结果。执行更新操作时会发生什么?你有任何例外或记录根本没有更新?如果是前者则分享例外细节。如果以后(即记录没有更新),那么检查你传递的主id字段的值(我相信通过一些参数)。如果它为null或零,则不会更新任何记录。