提问人:beriscen 提问时间:4/1/2022 更新时间:4/1/2022 访问量:288
如何使用带参数的表名的 Select 查询?[复制]
How to use Select query for table names with parameters? [duplicate]
问:
当使用 Insert 查询时,参数将正常工作,因为它用于值,但是如果我将参数用于表名的 Create 或 Select 查询,它就不会发生,因为显然表名必须是静态的。
#For 示例
SqlCommand myCommand = new SqlCommand("create table @1 ([BACK_LANG] varchar(50)");
myCommand.Connection = myDatabase;
myCommand.Parameters.AddWithValue("@1", this.getName()); //it was already set
myCommand.ExecuteNonQuery();
但是我确实需要使用带有参数的 Select/Create 查询,因为我将从他们创建的表中进行选择。
可悲的是,我无法想出解决方案,不得不使用非参数方式,这容易受到SQL注入的影响,我过去几天所做的谷歌搜索对我没有帮助。
如何在 SQL Server 中使用 Create/Select Queries with .NET 作为表名?
答:
1赞
Aaron Bertrand
4/1/2022
#1
您不能像这样将对象名称作为参数直接传递给语句。您仍然可以使用参数,但命令必须如下所示:
(@"declare @sql nvarchar(max) = N'create table dbo.'
+ QUOTENAME(@1) + N'([BACK_LANG] varchar(50));';
EXEC sys.sp_executesql @sql;")
或者只是在 C# 中构建字符串,使用 SqlCommandBuilder
的,它提供与 .QuoteIdentifier(this.getName())
QUOTENAME()
有关 SQL 注入的更多信息:动态 SQL
评论