Есть ли в .Net функциональная разница между созданием нового объекта SqlCommand
и присоединением к нему SqlConnection
и вызовом CreateCommand()
на существующем объекте SqlConnection
?
Нет, это одно и то же.
Я разобрал SqlConnection.CreateCommand
и обнаружил следующее:
public SqlCommand CreateCommand()
{
return new SqlCommand(null, this);
}
что доказывает, что это действительно одно и то же.
Они выполняют одно и то же действие. Смысл SqlConnection.CreateCommand
заключается в реализации паттерна фабрики.
Функционально они абсолютно одинаковы.
Однако SqlConnection.CreateCommand()
позволяет вам быть более независимым от того, какой тип БД вы используете. Например, вместо передачи экземпляра SqlConnection
вы можете передать его как DbConnection
, что приведет к созданию DbCommand
.
Это может пойти, не говоря, но просто для полноты, есть одно отличие. Если вы создаете команду sqlcommand, вы можете пройти в запроса в качестве параметра. Если вы позволите метод sqlconnection CreateCommand, нет положения для подачи запроса. Так как вы можете просто установить свойство sqlcommand'ы свойства commandtext свойство, грань довольно тонкая, но она существует.
SqlConnection db = new SqlConnection();
SqlCommand cmd = db.CreateCommand();
cmd.CommandText = "select @@version";
или
SqlConnection db = new SqlConnection();
SqlCommand cmd = new SqlCommand("select @@version", db);