Подготовленные заявления - итеративный запрос - PullRequest
1 голос
/ 13 февраля 2011

Мне нужно обновить следующий код, чтобы использовать подготовленные операторы:

OdbcCommand cmd = sql.CreateCommand();
cmd.CommandText = "SELECT [EMail] from myTable WHERE "+,
for (int i = 0; i < 50; i++)
{
   if (i > 0)
   {
      cmd.CommandText += " OR ";
   }
   cmd.CommandText += "UNIQUE_ID = " + lUniqueIDS[i];
}

Запретите мой глупый код, приведенный выше, это всего лишь пример ... Я пытаюсь получить все электронные письма пользователей с идентификаторами x, y, z и т. Д.

Вопрос в том, как мне переписать его, используя подготовленные утверждения? Слепое наивное предположение будет

for (int i = 0; i < 50; i++)
{
   if (i > 0)
   {
      cmd.CommandText += " OR ";
   }
   cmd.CommandText += "UNIQUE_ID = ?";
   cmd.Parameters.Add("@UNIQUE_ID", OdbcType.BigInt).Value = lUniqueIDS[i];
}

Должно ли это работать? Могу ли я добавить один и тот же параметр (unique_id) более одного раза?

1 Ответ

1 голос
/ 13 февраля 2011

Похоже, что вы используете позиционные параметры (т.е. ? в запросе, а не @UNIQUE_ID), что означает, что имена параметров не должны иметь значения для SQL. Однако я не был бы полностью удивлен, увидев, что поставщик жалуется ... и это может усложнить диагностику. Я предлагаю вам использовать индекс в качестве суффикса:

cmd.Parameters.Add("@UNIQUE_ID" + i, ObdcType.BigInt).Value = lUniqueIDs[i];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...