从变量表中获取数据并返回为数据表 C#

本文关键字:返回 数据表 数据 变量 获取 | 更新日期: 2023-09-27 17:56:32

我需要从指定的表中检索所有数据,并且不需要强类型数据,因此我将其作为数据表返回。

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 攻击是开放的,所以我计划添加一些关于可以查询哪些类型的保护。

从变量表中获取数据并返回为数据表 C#

您可以动态构造查询 - (这里应该没问题,但可能会将您的查询暴露给 sql 注入)

        var query = String.Fromat("Select * from [{0}]", type.Name);
        var sqlComm = new SqlCommand(query, sqlConn);
        /*sqlComm.Parameters.AddWithValue("@table", type.Name);*/