gpt4 book ai didi

c# - 修改表SqlCommand

转载 作者:行者123 更新时间:2023-12-03 07:11:23 25 4
gpt4 key购买 nike

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

    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 附近的语法不正确”。我找不到这个问题的解决方案。我可以尝试使用存储过程,但我真的想知道为什么代码不起作用。我通常使用带参数的 SqlCommand 进行 select、insert 语句,但它似乎不适用于 alter 语句?

最佳答案

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

这是 UDF

private bool IsValidColumnNameOrTableName(string tablecolumnName)
{
// other codes
return returnValue;
}

关于c# - 修改表SqlCommand,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15186394/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com