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

32
在 .Net 中,创建一个新的 SqlCommand 对象并将 SqlConnection 附加到它上面与在现有的 SqlConnection 对象上调用 CreateCommand() 方法之间是否存在任何功能上的区别?
4个回答

42
不,它们是同一个东西。 我反汇编了SqlConnection.CreateCommand并发现了这个。
public SqlCommand CreateCommand()
{
        return new SqlCommand(null, this);
}

这证明它们确实是同一件事。


13

它们做的事情是一样的。 SqlConnection.CreateCommand 的原理是实现工厂模式。


10

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

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


3

这可能是显而易见的,但为了完整起见,有一个区别。如果您创建一个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);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接