получить данные из таблицы переменных и вернуть в виде данных c # - PullRequest
0 голосов
/ 13 мая 2011

Мне нужно получить все данные из указанных таблиц, и мне не требуется строго типизировать данные, поэтому я возвращаю их в виде таблицы данных.

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-атак, поэтому я планирую добавить некоторую защиту о том, какие именно типы можно запрашивать.

1 Ответ

3 голосов
/ 13 мая 2011

Вы можете построить свой запрос динамически - (здесь должно быть все в порядке, но может подвергнуть ваш запрос внедрению sql)

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