SqlConnection.CreateCommand和新的SqlCommand之间有什么区别吗?

在.Net中,创建新的SqlCommand对象和将SqlConnection附加到它并在现有的SqlConnection对象上调用CreateCommand()之间是否存在任何function差异?

不,他们是一回事。

我反汇编了SqlConnection.CreateCommand并发现了这个:

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

这certificate他们真的是一回事。

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

在function上它们完全相同。

但是, SqlConnection.CreateCommand()使您可以更加了解您正在使用的DB类型。 例如,不是传递SqlConnection实例,而是可以将其作为DbConnection传递,这将产生DbCommand

这可能不言而喻,但只是为了完整,存在一个区别。 如果创建SqlCommand,则可以将CommandText作为参数传递。 如果您使用SqlConnection CreateCommand,则没有提供CommandText的规定。 既然你可以设置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);