C#MySqlConnector下一个查询在同一个连接中

时间:2014-10-26 21:11:08

标签: c# .net mysql-connector sqldatareader sqlcommand

我有以下代码:

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”不接受任何值。

2 个答案:

答案 0 :(得分:1)

我不相信你可以将另一个读者连接到一个连接,当一个连接已经打开并处理记录时。您必须首先检索所有记录,即ToList()或Dataset,或者为第二个读取器使用辅助连接。

为了让您的生活更轻松,请考虑使用DapperLinq2Db两个非常棒的微型ORM。

答案 1 :(得分: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);
        }
    }
}