首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Alter table SqlCommand

Alter table SqlCommand
EN

Stack Overflow用户
提问于 2013-03-03 21:55:12
回答 3查看 2.6K关注 0票数 2

我尝试使用带参数的SqlCommand更改表中某一列的数据类型,但不起作用。下面是我的代码:

代码语言:javascript
复制
    Dictionary<string,string> dict = new Dictionary<string,string>();
    dict.Add("@TableName",TableColumnArray[0].ToString( ));
    dict.Add("@ColumnName",TableColumnArray[1].ToString( ));
    DBSql.ExecSQLStatement( "ALTER TABLE @TableName ALTER COLUMN @ColumnName varchar(MAX)",dict,connectionStringName);

    public static void ExecSQLStatement (string strsql,Dictionary<string,string> dict,string  connectionStringName)
    {
        SqlConnection con = CreateSqlConnectionStr(connectionStringName);
        SqlCommand cmd = new SqlCommand(strsql,con);
        foreach(string dictKey in dict.Keys)
        {
            cmd.Parameters.Add(new SqlParameter(dictKey,dict[dictKey]));
        }
        con.Open( );
        cmd.ExecuteNonQuery( );
        con.Close( );
    }

但是代码一直抛出一个错误:“@TableName附近的语法不正确”。我找不到解决这个问题的办法。我可以尝试使用存储过程,但我真的想知道代码为什么不能工作。我通常使用带有select、insert语句参数的SqlCommand,但它似乎不适用于alter语句?

EN

回答 3

Stack Overflow用户

发布于 2013-03-03 21:58:38

因为在默认情况下,tableName和列名不能参数化为。避免sql注入的一种方法是创建一个用户定义函数来检查tableName是否有效。然后将名称连接到字符串上。例如,

下面是UDF

代码语言:javascript
复制
private bool IsValidColumnNameOrTableName(string tablecolumnName)
{
    // other codes
    return returnValue;
}
票数 6
EN

Stack Overflow用户

发布于 2013-03-03 21:59:09

不能在DDL语句中使用参数。您应该动态创建语句字符串:

代码语言:javascript
复制
DBSql.ExecSQLStatement(
    "ALTER TABLE " + TableColumnArray[0] + " ALTER COLUMN " + TableColumnArray[1] + " varchar(MAX)",
    dict,connectionStringName);
票数 1
EN

Stack Overflow用户

发布于 2013-03-03 21:59:14

您需要准确指定表名和列名:

代码语言:javascript
复制
"ALTER TABLE " + TableColumnArray[0].ToString( ) + " ALTER COLUMN " + TableColumnArray[1].ToString( ) + "varchar(MAX)"

sql server不允许将表名和列名作为变量值的语法。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15186394

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档