【发布时间】:2012-09-25 13:43:20
【问题描述】:
我想使用一个 SqlCommand 在一批中执行多个 select、insert、update 语句,以提高性能。
CommandText 由多个预定义的插入、更新语句动态组合而成(SqlParam 也是动态组合的)。插入有时适用于具有 autoid 字段的表,因此有必要取回最后插入的 id。我为此使用“SELECT SCOPE_IDENTITY()”。
通常组装的 CommandText 如下所示:
INSERT xxxxx ;
SELECT SCOPE_IDENTITY();
INSERT yyyyy ;
SELECT SCOPE_IDENTITY();
INSERT zzzzz ;
UPDATE xxxxx ;
INSERT wwwww ;
SELECT SCOPE_IDENTITY();
我想检索所有 scope_identity 值以及受影响的行数。 ExecuteNonQuery 和 ExecuteScalar 不可用,因为它们只返回单个值。 ExecuteReader 更好,它会从选择中返回信息(在上面的示例中给出 3 个结果),但我也需要受影响的行(用于检查执行)。
public IList Execute()
{
var results = new ArrayList();
using (var command = connection.CreateCommand())
{
command.Transaction = transaction;
var commandText = new StringBuilder();
.... building commandtext dynamically
command.CommandText = commandText.ToString();
command.Parameters.AddRange(... adding paramters dynamically);
var reader = command.ExecuteReader();
do
{
if (reader.Read())
results.Add(reader.IsDBNull(0) ? null : reader.GetValue(0));
} while (reader.NextResult());
reader.Close();
}
return results;
}
有什么办法得到它吗?
【问题讨论】:
-
@@ROWCOUNT 是你的朋友。在这里查看:stackoverflow.com/questions/1103260/…