C# SqlConnection.CreateCommand和new SqlCommand之间有什么区别吗?

C# SqlConnection.CreateCommand和new SqlCommand之间有什么区别吗?,c#,ado.net,C#,Ado.net,在.Net中,创建一个新的SqlCommand对象与将SqlConnection附加到对象上并对现有的SqlConnection对象调用CreateCommand()之间在功能上有什么区别吗?不,它们是一样的 我反汇编了SqlConnection.CreateCommand,发现: public SqlCommand CreateCommand() { return new SqlCommand(null, this); } 这证明了他们真的是同一件事。不,他们是同一件事 我反

在.Net中,创建一个新的
SqlCommand
对象与将
SqlConnection
附加到对象上并对现有的
SqlConnection
对象调用
CreateCommand()
之间在功能上有什么区别吗?

不,它们是一样的

我反汇编了
SqlConnection.CreateCommand
,发现:

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

这证明了他们真的是同一件事。

不,他们是同一件事

我反汇编了
SqlConnection.CreateCommand
,发现:

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

这证明了它们确实是同一个东西。

从功能上说,它们完全相同


但是,
SqlConnection.CreateCommand()
可以让您更加不知道所使用的数据库类型。例如,您可以将其作为
DbConnection
传递,而不是传递
SqlConnection
实例,这将产生一个
DbCommand

,它们在功能上完全相同


但是,
SqlConnection.CreateCommand()
可以让您更加不知道所使用的数据库类型。例如,您可以将
SqlConnection
实例作为
DbConnection
进行传递,而不是传递一个
SqlConnection
实例,这将产生一个
DbCommand

,它们执行相同的操作。
SqlConnection.CreateCommand
背后的基本原理是实现工厂模式。

它们做同样的事情。
SqlConnection.CreateCommand
背后的基本原理是实现工厂模式。

这可能不言而喻,但完整地说,有一个区别。如果创建SqlCommand,则可以将CommandText作为参数传入。如果让SqlConnection创建命令,则没有提供CommandText的规定。因为您可以只设置SqlCommand的CommandText属性,区别很小,但它确实存在

SqlConnection db = new SqlConnection();
SqlCommand cmd = db.CreateCommand();
cmd.CommandText = "select @@version";


这可能不言而喻,但完整地说,有一个区别。如果创建SqlCommand,则可以将CommandText作为参数传入。如果让SqlConnection创建命令,则没有提供CommandText的规定。因为您可以只设置SqlCommand的CommandText属性,区别很小,但它确实存在

SqlConnection db = new SqlConnection();
SqlCommand cmd = db.CreateCommand();
cmd.CommandText = "select @@version";