C# 从变量表中获取数据并作为datatable c返回#
我需要检索指定表中的所有数据,并且我不需要强类型的数据,所以我将它作为数据表返回C# 从变量表中获取数据并作为datatable c返回#,c#,sql,ado.net,parameterized,C#,Sql,Ado.net,Parameterized,我需要检索指定表中的所有数据,并且我不需要强类型的数据,所以我将它作为数据表返回 public DataTable GetByTypeName(String t) { var type = Type.GetType(t); var dt = new DataTable(); using (var sqlConn = new SqlConnection(ConfigurationManager.ConnectionStrings["Mas
public DataTable GetByTypeName(String t)
{
var type = Type.GetType(t);
var dt = new DataTable();
using (var sqlConn = new SqlConnection(ConfigurationManager.ConnectionStrings["MasterPlanConnectionString"].ConnectionString))
{
var sqlComm = new SqlCommand("SELECT * FROM @table", sqlConn);
sqlComm.Parameters.AddWithValue("@table", type.Name);
sqlConn.Open();
var dr = sqlComm.ExecuteReader(CommandBehavior.CloseConnection);
dt.Load(dr);
}
return dt;
}
当我运行这个时,我得到了错误
System.Data.SqlClient.SqlException was unhandled by user code
Message=Must declare the table variable "@table".
我无法理解为什么我已经声明@table,但它不起作用。我知道这种方法会受到一些糟糕的sql攻击,所以我计划添加一些保护,以确切说明可以查询哪些类型。您可以动态构造查询-(此处应该可以,但可能会将查询暴露给sql注入)
您可以动态构造查询-(在这里应该可以,但可能会将查询暴露给sql注入)
+1 OP尝试的方式永远不会起作用,因为这不是参数工作的方式,希望通过确保类型必须实现特定的接口来减轻sql注入,最坏情况下,您可以查看与指定不同的审核表的审核数据+1 OP尝试的方式永远不会起作用,因为参数不是这样工作的,所以通过确保该类型必须实现特定的接口,很可能已经减轻了sql注入的影响。在最坏的情况下,您可以查看与指定的审计表不同的审计数据
var query = String.Fromat("Select * from [{0}]", type.Name);
var sqlComm = new SqlCommand(query, sqlConn);
/*sqlComm.Parameters.AddWithValue("@table", type.Name);*/