2014-02-03 4 views
1

Это часть моего кода в C#с # MySQL ждать предыдущего запроса, чтобы закончить

MySqlConnection connection = new MySqlConnection(MyConnectionString); 
connection.Open(); 
cmd = connection.CreateCommand(); 
... 
int xxxx; 
cmd.CommandText = "UPDATE myTable SET ..... "; 
xxxx = cmd.ExecuteNonQuery(); 
Debug.WriteLine(xxxx + " rows updated"); 

cmd.CommandText = "select id,... from myTable"; 
dr = cmd.ExecuteReader(); 
while (dr.Read()) 
... 

Первый запрос (обновление) займет около 30 секунд, чтобы выполнить. Что я наблюдаю, возможно, что второй запрос выполняется до того, как query1 обновил таблицу.

  • Это то, что должно произойти в соответствии с этим кодом?
  • Есть ли способ, чтобы предотвратить это (то есть полный 1-запрос, а затем выполнить 2-ую)
+1

Нет, это не должно произойти. Вы абсолютно уверены, что это ** происходит? – Blorgbeard

+0

хорошо, не уверенно на 100%. вот почему я сказал, может быть. Я только что добавил код в начале о cmd. Итак, что должно случиться, так это то, что cmd может иметь только один «экземпляр», и каждый запрос должен заканчиваться до начала следующего, верно? –

+0

@Thanos Darkadakis: запросы выполняются один за другим – zerkms

ответ

1

ExecuteNonQuery() метод является синхронным и следующим оператор не будет выполнен до тех пор, пока не будет завершен. То же самое относится к ExecuteReader().

Эти два запроса не могут выполняться параллельно в коде выше (по крайней мере, из одного потока. Если приведенный выше код работает на нескольких потоках, это может произойти).

Есть также соответствующие асинхронные методы ExecuteNonQueryAsync() и ExecuteReaderAsync(), но они не используются в коде выше.

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