Есть ли разница между SqlConnection.CreateCommand и new SqlCommand?

Есть ли в .Net функциональная разница между созданием нового объекта SqlCommand и присоединением к нему SqlConnection и вызовом CreateCommand() на существующем объекте SqlConnection?

Решение

Нет, это одно и то же.

Я разобрал SqlConnection.CreateCommand и обнаружил следующее:

public SqlCommand CreateCommand()
{
        return new SqlCommand(null, this);
}

что доказывает, что это действительно одно и то же.

Комментарии (0)

Они выполняют одно и то же действие. Смысл SqlConnection.CreateCommand заключается в реализации паттерна фабрики.

Комментарии (0)

Функционально они абсолютно одинаковы.

Однако SqlConnection.CreateCommand() позволяет вам быть более независимым от того, какой тип БД вы используете. Например, вместо передачи экземпляра SqlConnection вы можете передать его как DbConnection, что приведет к созданию DbCommand.

Комментарии (0)

Это может пойти, не говоря, но просто для полноты, есть одно отличие. Если вы создаете команду 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);
Комментарии (0)