C#修改SQL表

C#修改SQL表,c#,sql,C#,Sql,我有以下代码: try { OpenDatabaseConnection(); sql += @"ALTER TABLE @TableName " + "ADD @ColumnName @DataType(@Size)"; using (SqlCommand command = conn.CreateCommand()) { command.CommandText = sql; command.Parame

我有以下代码:

try
{
    OpenDatabaseConnection();
    sql += @"ALTER TABLE @TableName " +
            "ADD @ColumnName @DataType(@Size)";

    using (SqlCommand command = conn.CreateCommand())
    {
        command.CommandText = sql;
        command.Parameters.Add("@TableName", SqlDbType.VarChar).Value = tableName;
        command.Parameters.Add("@ColumnName", SqlDbType.NVarChar).Value = columnName;
        command.Parameters.Add("@DataType", SqlDbType.NVarChar).Value = dataType;
        command.Parameters.Add("@Size", SqlDbType.NVarChar).Value = size;

        command.ExecuteNonQuery();
    }
    CloseDatabaseConnection();
}
catch (Exception ex)
{
     ArrowMessageBoxes.ArrowErrorMessage(ex.Message);
}
finally
{
     CloseDatabaseConnection();
}
当这段代码运行时,我得到以下错误:“@TableName”附近的语法不正确


我一定缺少什么。

DDL不能包含参数。如果坚持动态创建/更改表和列,则需要创建动态SQL和。

DDL不能包含参数。如果您坚持动态创建/更改表和列,则需要创建动态SQL和。

当我创建表和插入这些表时,这很好。但是当我更改表的时候……??@Bebbie7您是否正在为创建表参数化表名?是的,与此完全相同,但只是插入和创建表。我允许用户创建他们自己的表和东西。你可以创建一个名为“AlterSchema”的过程,其中包含所有这些参数。然后使用param值构建并执行动态sql。这将有助于检查模式更改是否不是重复(因为您可以查看sysobjects)以及值是否有效。我个人的看法:这似乎是个坏主意,如果你在更改对象时锁定了它怎么办?如果两个调用/会话试图同时进行更改怎么办?@mrtig同意,但您可以在存储过程中进行更改,以便一次只能处理一个更改。当我创建表和插入这些表时,这很好。但是当我更改表的时候……??@Bebbie7您是否正在为创建表参数化表名?是的,与此完全相同,但只是插入和创建表。我允许用户创建他们自己的表和东西。你可以创建一个名为“AlterSchema”的过程,其中包含所有这些参数。然后使用param值构建并执行动态sql。这将有助于检查模式更改是否不是重复(因为您可以查看sysobjects)以及值是否有效。我个人的看法:这似乎是个坏主意,如果你在更改对象时锁定了它怎么办?如果两个呼叫/会话试图同时进行更改怎么办?@mrtig同意,尽管您可以在存储过程中进行更改,因此一次只能处理一个更改。正如我在下面的回答中所说,请小心。考虑一些类似于 TabLeNAM= =“Foo[Lo]”\nG\\nAlter表[Fo] 。现在这对商业来说不是很好,这是我在下面的回答中所说的最少的损坏,请小心。考虑一些类似于<代码> TabLeNAM= =“Foo[Lo]”[ID] \NGO\NALTURE表[FO]。。现在,这对业务不太好,而且这是他们可能造成的最小损害。为什么要动态更改表?如果需要更新表的架构,您可能需要像SSDT项目这样的项目。需要动态更改数据库架构以使应用程序正常运行是一个非常重要的问题巨大的红旗。这意味着您的数据库设计不正确。为什么要动态更改表?如果您需要更新表的架构,可能需要SSDT项目之类的东西。需要动态更改数据库架构以正确操作应用程序是一个巨大的红旗。这意味着您的数据库ase设计不当。
sql += @"ALTER TABLE [" + tableName + "] " +
        "ADD [" + columnName + "] " + dataType + " (" + size + ")";