Я использую IDBCommand
для своего уровня базы данных, чтобы переключиться на других поставщиков баз данных, кроме SqlDataProvider
.
SqlCommand
имеет все асинхронные методы, такие как ExecuteNonQueryAsync, но IDBCommand
не содержит асинхронный метод.
В будущем нам может понадобиться переключиться на другого поставщика данных, кроме Sql
, я просто не могу использовать SqlCommand
напрямую.
Я просто думаю реализовать свои собственные версии Async. Будут ли проблемы с производительностью, если я реализую свою собственную? Или лучше использовать реализованные в Microsoft асинхронные методы, доступные для SqlCommand
объекта?
Следующим способом я реализовал свои Async
методы. Следующее является синхронным:
public int ExecuteNonQuery(CommandType commandType, string commandText)
{
PrepareCommand(commandType, commandText);
var noOFRowsAffected = _dbCommand.ExecuteNonQuery();
SetParameters(_dbCommand.Parameters);
return noOFRowsAffected;
}
Ниже приведена Async
версия:
public async Task<int> ExecuteNonQueryAsync(CommandType commandType, string commandText)
{
PrepareCommand(commandType, commandText);
var noOFRowsAffected = await Task.Factory.StartNew(() =>
{
return _dbCommand.ExecuteNonQuery();
});
SetParameters(_dbCommand.Parameters);
return noOFRowsAffected;
}
Обратите внимание, что обработка исключений будет выполняться вызывающим
слой. * * тысяча двадцать пять
Может кто-нибудь дать мне правильное направление? Это правильный способ сделать асинхронную операцию, или я должен использовать Microsoft SqlCommand
, чтобы использовать свои собственные методы? Любая помощь очень ценится. Заранее спасибо:)