如何将表名传递给SqlCommand?

Uth*_*iah 3 c# ado.net sqlcommand

我试图将表名作为参数传递给我的查询,SqlCommand但它似乎没有工作.这是我的代码;

SqlConnection con = new SqlConnection( "server=.;user=sa;password=12345;database=employee" );
con.Open( );
SqlCommand cmd = new SqlCommand( "drop table @tbName" , con );
cmd.Parameters.AddWithValue( "@tbName" , "SampleTable" );
cmd.ExecuteNonQuery( );
con.Close( );
Run Code Online (Sandbox Code Playgroud)

Son*_*nül 8

SqlCommand.Parameters支持数据操作语言操作而非数据定义语言操作.

即使您使用DML,也无法参数化您的表名或列名等.您只能参数化您的值.

数据操作语言=

SELECT ... FROM ... WHERE ...
INSERT INTO ... VALUES ...
UPDATE ... SET ... WHERE ...
DELETE FROM ... WHERE ...
Run Code Online (Sandbox Code Playgroud)

数据定义语言=

CREATE TABLE ... 
DROP TABLE ... ;
ALTER TABLE ... ADD ... INTEGER;
Run Code Online (Sandbox Code Playgroud)

您不能将DROP语句与参数一起使用.

如果你真的必须使用drop语句,你可能需要使用字符串连接SqlCommand.(注意SQL注入)您可能需要查看名为Dynamic SQL的术语

还可以使用using语句来处置您SqlConnectionSqlCommand等;

using(SqlConnection con = new SqlConnection(ConnectionString))
using(SqlCommand cmd = con.CreateCommand())
{
   cmd.CommandText = "drop table " + "SampleTable";
   con.Open()
   cmd.ExecuteNonQuery();
}
Run Code Online (Sandbox Code Playgroud)