На самом деле не делай этого. Вы только что представили уязвимость SQL-инъекции, обойдя параметры SQL.

я есть таблица базы данных с именем Теги (Id, Name), из которой я хотел бы выбрать те, где имя соответствует имени в списке. В SQL я бы использовал что-то вроде:

Select * from Tags Where Name In ('Name1', 'Name2', 'xxx...)

Но теперь, используя PetaPoco в проекте ASP.Net MVC3, я застрял, пытаясь понять, как это сделать правильно. Пока что я пробовал:

var tagsToFind = new string[] { "SqlServer", "IIS" };
var sql = PetaPoco.Sql.Builder.Select("*").From("Tags").Where("Name in (@0)", tagsToFind);
var result = db.Query<Tag>(sql);

Что приводит к следующему SQL, гдетолько первый name в моем списке tagsToFind используется для сопоставления данных таблицы, в отличие от всех них.

SELECT * FROM Tags WHERE (Name in (@0)) -> @0 [String] = "SqlServer"

Это немного расстраивает, зная, что это, вероятно, не так сложно ... любая помощь приветствуется!

Обновить: Я узнал, что это можно сделать по-другому

var sql = PetaPoco.Sql.Builder.Append("Select * from tags Where Name IN (@0", tagNames[0]);
foreach (string tagName in tagNames.Where(x => x != tagNames[0])) {
    sql.Append(", @0", tagName);
}        
sql.Append(")");
var result = db.Query<Tag>(sql)

что дает мне то, что я хочу при использовании sqlparameters. Так что я думаю, что сейчас это достаточно хорошо, хотя и не очень красиво.

/Майк

Ответы на вопрос(5)

Ваш ответ на вопрос