2
我想在一个批处理中执行多个select,insert,update语句,使用一个SqlCommand来提高性能。
CommandText从多个预定义的插入,更新语句动态组合(SqlParams也是动态组合的)。插入有时在带有自动字段的表上工作,因此找回最后插入的ID是必需的。我使用'SELECT SCOPE_IDENTITY()'。 一个典型的组装的CommandText如下所示:SqlCommand具有多个批处理选择,插入,更新语句
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是你的朋友。检查这里:http://stackoverflow.com/questions/1103260/return-number-of-rows-affected-by-update-statements –