2014-10-26 2 views
1

У меня есть следующий код:C# MySqlConnector следующий запрос в том же соединении

string myConnection = "server=localhost;database=test;uid=test;password=test"; 
     string query = "SELECT label_type, label, quantity FROM system_printserver WHERE print=0"; 
     try 
     { 
      MySqlConnection myConn = new MySqlConnection(myConnection); 
      myConn.Open(); 
      MySqlCommand command = new MySqlCommand(query, myConn); 
      MySqlDataAdapter adapter = new MySqlDataAdapter(command); 
      DataTable data = new DataTable(); 
      adapter.Fill(data); 
      dataGridView1.DataSource = data; 
      printDocument1.PrintPage += new PrintPageEventHandler(printDocument1_PrintPage); 

      MySqlDataReader myReader; 
      myReader = command.ExecuteReader(); 
      while (myReader.Read()) { 
       orderNumber = myReader.GetString(1); 
       myReader.Close(); 
       string queryOrder = "SELECT id_order, id_carrier FROM ps_orders WHERE id_order=28329"; 
       MySqlCommand commandOrder = new MySqlCommand(queryOrder, myConn); 

       MySqlDataReader myReaderOrder; 
       myReaderOrder = commandOrder.ExecuteReader(); 
       idCarrier = myReaderOrder.GetString(1); 
       printDocument1.Print(); 
      } 

У меня есть проблема, потому что вторая строка запроса queryOrder не работает. Запрос равен Ok, но переменная «idCarrier» не принимает никакого значения.

ответ

0

Я не верю, что вы можете подключить другого читателя к соединению, когда он уже открыт и обрабатывает записи. Сначала необходимо получить все ваши записи, то есть ToList() или набор данных, или использовать вторичное соединение для второго считывателя.

Чтобы сделать вашу жизнь проще, подумайте об использовании Dapper или Linq2Db, двух удивительных микро-ORM.

0

Попробуйте так:

using(var connection = new MySqlConnection("server=localhost;database=test;uid=test;password=test") { 
    connection.Open(); 
    int orderNumber = 0; 
    using (var command = connection.CreateCommand()) { 
     command.CommandText = @"SELECT label_type, label, quantity FROM system_printserver WHERE print=0"; 
     DataTable data = new DataTable(); 
     adapter.Fill(data); 
     dataGridView1.DataSource = data; 

     var reader = command.ExecuteReader(); 
     printDocument1.PrintPage += new PrintPageEventHandler(printDocument1_PrintPage); 

     if(reader.Read()) { 
      orderNumber = Convert.ToInt32(reader.GetString(1)); 
     } 
    } 

    using(var command = connection.CreateCommand()) { 
     command.CommandText = string.format(@"SELECT id_order, id_carrier FROM ps_orders WHERE id_order={0}",orderNumber); 
     var reader = command.ExecuteReader(); 
     if(reader.Read()){ 
      printDocument1.Print(); 
      return reader.GetString(1); 
     } 
    } 
}