Как игнорировать параметры при выполнении SQL-запроса?

Ниже мой SQL-запрос:

select * 
from Table 
where col1 = @param1 and col2 = @param2

Теперь я хочу выполнить этот SQL-запрос, но меня просто интересует получение столбцов из запроса, а не каких-либо записей.

Я знаю, что могу манипулировать этим SQL-запросом, находя и удаляя все параметризованные параметры, но я просто думаю, есть ли способ игнорировать все эти параметры и просто выполнить (select * from Table).

Вот как я это делаю прямо сейчас:

TCommand cmd = new TCommand();
cmd.CommandText = sqlQuery;
cmd.Connection = connection;

using (var reader = cmd.ExecuteReader())
{
    reader.Read();

    var columns = reader.GetSchemaTable().AsEnumerable()
                        .Select(col => col["ColumnName"].ToString())
                        .ToArray();

    return columns;
}

Я получаю эту ошибку:

Необходимо объявить скалярную переменную "@param1"

Я хочу игнорировать этот параметр при выполнении SQL-запроса. Есть ли способ заставить ADO.NET игнорировать параметр моего запроса и просто выполнить запрос?


person Learning-Overthinker-Confused    schedule 10.07.2017    source источник
comment
Если вас интересуют только имена столбцов, то есть не фактические данные, посмотрите на этот вопрос - Как я могу получить имена столбцов из таблицы в SQL Server?   -  person laika    schedule 10.07.2017
comment
@PanagiotisKanavos На самом деле пользователь укажет эти параметры в запросе, поэтому я не могу их удалить. Я хочу игнорировать эти параметры, когда пользователь будет запрашивать столбцы после выполнения этого SQL-запроса.   -  person Learning-Overthinker-Confused    schedule 10.07.2017
comment
@laika Хорошо, тогда мне нужно извлечь имя таблицы из моего запроса, но я заинтересован в использовании метода GetSchemaTable.   -  person Learning-Overthinker-Confused    schedule 10.07.2017


Ответы (1)


Нет, вы не можете игнорировать параметры запроса. Если вам нужно использовать приведенный выше запрос для получения имен столбцов, вы должны самостоятельно манипулировать sql. Вы можете, например, игнорировать любое условие, такое как;

string sqlQuery="select * from Table where col1 = @param1 and col2 = @param2";
var newQuery = a.Substring(0, a.IndexOf("where"));

TCommand cmd = new TCommand();
cmd.CommandText = newQuery;
cmd.Connection = connection;

using (var reader = cmd.ExecuteReader())
{
    reader.Read();

    var columns = reader.GetSchemaTable().AsEnumerable()
                        .Select(col => col["ColumnName"].ToString())
                        .ToArray();

    return columns;
}
person ali    schedule 12.07.2017