Передача нескольких значений одному параметру во встроенном запросе SQL с использованием C # - PullRequest
0 голосов
/ 09 ноября 2018

Я новичок в кодировании и ищу некоторую помощь о том, как передать несколько значений одному параметру в встроенном запросе SQL.Я создал следующий запрос, но слышал, что это может привести к проблеме с SQL-инъекцией.Пожалуйста, помогите, как я могу сформулировать ниже, используя параметр, основанный на запросе SQL.

string query = "Select ID, email FROM DBTABLE WHERE email in (";
var stringBuiler = new StringBuilder();
using (StringReader stringReader = new StringReader(DownloadIDtextBox.Text))
{
    string line;
    string prefix = "";
    while ((line = stringReader.ReadLine()) != null)
    {
        stringBuiler.Append(prefix);
        prefix = ",";
        stringBuiler.Append("'" + line + "'");
    }

}
query += stringBuiler.ToString() + ")";
SqlDataAdapter da = new SqlDataAdapter(query, Connection);
DataTable dt = new DataTable();
da.Fill(dt);

Просто хочу упомянуть, что идентификатор в формате GUID.

1 Ответ

0 голосов
/ 09 ноября 2018

Если вы делаете это вручную, процесс будет (в основном):

var stringBuiler = new StringBuilder("Select ID, email FROM DBTABLE WHERE email in (");
// create "cmd" as a DB-provider-specific DbCommand instance, with "using"
using (...your reader...)
{
    int idx = 0;
    ...
    while ((line = stringReader.ReadLine()) != null)
    {
        // ...
        Guid val = Guid.Parse(line);
        // ...
        var p = cmd.CreateParameter();
        p.Name = "@p" + idx;
        p.Value = val;
        if (idx != 0) stringBuiler.Append(",");
        stringBuiler.Append(p.Name);
        cmd.Parameters.Add(cmd);
        idx++;
    }

}
cmd.CommandText = stringBuiler.Append(")").ToString();

и используйте , что ... означает: вы не используете встроенный SQL - вы используете полностью параметризованный SQL. В семействах ORM / micro-ORM есть инструменты, которые помогут безмерно здесь - сделать его однострочным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...