Я создаю функцию, где я проверяю, проверен ли день обслуживания в базе данных. В каждой колонке находится Maintenance + DayName (MaintenanceSunday, MaintenanceMonday и т. Д.).Поле имени поля в запросе dapper
Похоже, что в любое время, когда вы проходите мимо объекта, он хочет принять значение проверяемого и не «ввести» строку. Есть ли способ безопасно достичь этого (т. Е. Не String.Format («где {0} = ...», поле))? Я действительно не хочу открывать возможность SQL Injection здесь (хотя есть более ранняя проверка, чтобы увидеть, есть ли q.ToUpper() в списке «SUNDAY», «MONDAY» и т. Д., Поэтому я думаю, что есть гарантия)
Я попытался это, но бомба пытается сравнить «Maintenancesunday» истинные (бит):
string field = "Maintenance" + q; // q = "sunday"
return conn.Query<Data>("SELECT * FROM Data WHERE @Field = @Value", new { Field = field, Value = true }).ToList();
Ваш запрос выглядит не так, вы сравниваете значения параметров друг с другом, а не столбцы – Ric
справедливая точка. Есть ли способ в Dapper безопасно передать имя столбца, где я пытаюсь использовать поле? – Robert
Не так, ваш запрос должен выглядеть так: 'conn.Query (" SELECT * FROM Data WHERE Field = @Field AND Value = @Value ", новый {Field = field, Value = true})' например. Это параметризует ваш запрос и безопасно из sql-injection – Ric