2015-12-25 4 views
0

Я использую MySqlParameter в моем коде C#.Несколько Вставить в одном запросе с MySqlParameters

С одной записи для вставки, код выглядит следующим образом:

 string query = "INSERT IGNORE INTO giveaways(giveaway_id, status) VALUES(@giveawayID, @status)"; 
     MySqlParameter[] parameters = { 
      new MySqlParameter("@giveawayID", giveawayID), 
      new MySqlParameter("@status", (byte) status) 
     }; 

     await ExecuteNonQueryRetryAsync(query, parameters).ConfigureAwait(false); 

Однако, я не знаю, как достичь подобную вещь, если я хочу, чтобы вставить несколько записей в одном SQL запросе, при этом используя MySqlParameter.

На данный момент, я написал что-то вроде этого:

 StringBuilder query = new StringBuilder("INSERT IGNORE INTO winners(giveaway_id, winner_id) VALUES"); 
     foreach (ulong winner in winners) { 
      query.Append("('" + giveawayID + "'," + winner + "),"); 
     } 

     query.Length -= 1; // Remove last char ',' from values 
     await ExecuteNonQueryRetryAsync(query.ToString()).ConfigureAwait(false); 

Он работает, но он не использует MySqlParameter вообще. Есть ли лучший способ достичь этого? Я имею в виду, мне приходится обращаться с цитированием литералов и других вещей, подобных мне, когда мне не нужно об этом беспокоиться при использовании MySqlParameter, что также является лучшим способом ИМХО.

Итак, действительно вопрос ... Есть ли способ загрузить параметр MySQL с помощью массива или любой другой хороший способ передать несколько значений для вставки?

Заранее спасибо.

(Tagged кодирование-стиль, потому что я на самом деле пытается написать что-то лучше, чем то, что написано уже)

+0

для цитируемых литералов вы не можете использовать строку. Функция Format в вашем запросе. Функция приложения ..? – MethodMan

+0

Да, эта часть, вероятно, может быть написана лучше, и я, скорее всего, ее перепишу, но я подумал, есть ли способ использовать MySqlParameter вместо того, чтобы делать все это вручную. – JustArchi

+0

Что вы имеете в виду вместо того, чтобы делать это вручную ..? также, когда я вставляю много данных в Sql Server без использования 'Bulk Inserts', потому что наш« DBA »отключил эту функцию на Sql Server, я создаю себе временную таблицу, затем каждый раз передаю все свои данные из данных, преобразованных в XML и делать объемные вставки таким образом .. намного проще .. или вы можете создать определенный пользователем тип на db и сделать это так же. – MethodMan

ответ

0

Я закончил с первоначальной идеей из-за неспособности придумать ничего лучшего, я просто заменил giveawayID с параметром MySQL, потому что я мог бы это сделать.

 StringBuilder query = new StringBuilder("INSERT IGNORE INTO winners(giveaway_id, winner_id) VALUES"); 
     foreach (ulong winnerID in winners) { 
      query.Append("(@giveawayID, " + winnerID + "),"); 
     } 

     query.Length -= 1; // Remove last char ',' from values 

     MySqlParameter[] parameters = { 
      new MySqlParameter("@giveawayID", giveawayID) 
     }; 

     await ExecuteNonQueryRetryAsync(query.ToString(), parameters).ConfigureAwait(false); 

Если кто-нибудь когда-нибудь узнает, что лучший способ, пожалуйста, не стесняйтесь отправить его, я действительно надеюсь, что это лучший подход.

Смежные вопросы