C# 在构建SQL Server表时使用SMO和SQL查询(通过SqlConnection)之间的区别

C# 在构建SQL Server表时使用SMO和SQL查询(通过SqlConnection)之间的区别,c#,sql-server,smo,sqlconnection,C#,Sql Server,Smo,Sqlconnection,我真的不明白在SQL Server数据库中创建表时使用一个或另一个的区别。在构建表时,一个比另一个更安全还是更快?我不确定SMO是否涵盖了您想要为表设置的每个属性和属性,四处搜索以找到它们可能是徒劳的。就我个人而言,我更愿意使用DDL(CREATE TABLE,ALTER TABLE,等等),这不仅是因为我不必查找所有属性,还因为它有助于我在不想或不能使用SMO的情况下加强对这些命令的了解。但这可能只是一种偏好 至于速度,没有任何区别,除非你用纳秒秒表测量SMO层的解析/解释。它最终将构建与您自

我真的不明白在SQL Server数据库中创建表时使用一个或另一个的区别。在构建表时,一个比另一个更安全还是更快?

我不确定SMO是否涵盖了您想要为表设置的每个属性和属性,四处搜索以找到它们可能是徒劳的。就我个人而言,我更愿意使用DDL(
CREATE TABLE
ALTER TABLE
,等等),这不仅是因为我不必查找所有属性,还因为它有助于我在不想或不能使用SMO的情况下加强对这些命令的了解。但这可能只是一种偏好


至于速度,没有任何区别,除非你用纳秒秒表测量SMO层的解析/解释。它最终将构建与您自己编写的相同的
CREATE TABLE
命令,并将其发送到SQL Server。

SMO和DDL语句用于不同的目的,尽管有时可能会重叠

如果希望通过编程控制数据库模式,请使用SMO。一个例子是添加“动态”列,这意味着您的系统支持在运行时添加数据库列,并将它们映射到业务层和/或GUI。另一个例子是控制索引分割,并在事情变得棘手时发出危险信号

如果要创建安装应用程序的安装脚本,请使用TSQL DDL。更简单、更直接

编辑

使用SMO,您可以获得对象模型和API。想象一下,你必须一列一列地通过所有的列。使用SMO,您可以指定所需的元数据,加载它并在列集合上循环。使用ADO.NET,可以通过查询模式和系统表的信息来获取模式(尝试获取关于外键的所有信息并查看代码)


好吧,对于创建一个表或向表中添加一列来说,可能没有什么区别,事实上可能根本没有区别。但对于管理多个表和键,那将是另一回事。

您能否解释为什么SMO更适合于向表中添加列或“控制索引分段”?我不是在争论,我只是不清楚为什么你认为SMO会更好地处理这些事情。这个答案根本没有解决OP的问题。现在,请参见“或向表中添加列”