Как да игнорирате параметри, докато изпълнявате 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