将数组添加到我的 ExecuteReader() 函数

Posted

技术标签:

【中文标题】将数组添加到我的 ExecuteReader() 函数【英文标题】:Add arrays to my ExecuteReader() function 【发布时间】:2021-10-14 18:49:58 【问题描述】:

我正在尝试从我在 mysql 中创建的数据库中获取数据。我相信我的代码中的 DML 是正确的。我在另一个线程上看到我需要使用数组,以便我可以从表中获取所有行,但我正在努力将它们包含在我的代码中:

string cs = "server...";

MySqlConnection connection = new MySqlConnection(cs);


try

    Console.WriteLine("Connection sur MySQL...");
    connection.Open();
 
    string Insertion ="insert into Passager(...)values(...)";
    string Insert2 = "insert into Reservation(...)values(...)";
    string req1 = "SELECT CodePassager,";
    string req2 = "SELECT CodePassager,...";
    string req3 = "SELECT CodePassager,...";
    string joint = "SELECT Reservation...";

    MySqlCommand NQuery = new MySqlCommand(Insertion, connection);
    MySqlCommand NQuery2 = new MySqlCommand(Insert2, connection);
    MySqlCommand requete1 = new MySqlCommand(req1, connection);
    MySqlCommand requete2 = new MySqlCommand(req2, connection);
    MySqlCommand requete3 = new MySqlCommand(req3, connection);
    MySqlCommand reqjoint = new MySqlCommand(joint, connection);

    NQuery.ExecuteNonQuery();
    NQuery2.ExecuteNonQuery();

    //1st request
    using (MySqlDataReader reader1 = requete1.ExecuteReader())
    
        reader1.Read();
        int CodePassager;
        string Nom, Prenom;
        CodePassager = (int)reader1[0];
        Nom = (string)reader1[1];
        Prenom = (string)reader1[2];
        Console.WriteLine("code: 0,nom:1,prenom:2", CodePassager, Nom, Prenom);
        reader1.Close();
    

    //2nd request
    using (MySqlDataReader reader2 = requete2.ExecuteReader())
    
        reader2.Read();
        int CodePassager;
        string Nom, Prenom, Adresse;
        CodePassager = (int)reader2[0];
        Nom = (string)reader2[1];
        Prenom = (string)reader2[2];
        Adresse = (string)reader2[3];
        Console.WriteLine("code:0,...);
        reader2.Close();
    

    //3rd request
    using (MySqlDataReader reader3 = requete3.ExecuteReader())
    
        reader3.Read();
        int CodePassager;
        string Nom, Prenom, Adresse;
        CodePassager = (int)reader3[0];
        Nom = (string)reader3[1];
        Prenom = (string)reader3[2];
        Adresse = (string)reader3[3];
        Console.WriteLine("code: 0...);
        Console.WriteLine("---------------------------------------------------");
        Console.WriteLine("Reservation(s) pour ce client:");
        Console.WriteLine("---------------------------------------------------");

        reader3.Close();
        //request to show every reservation per passenger
        using (MySqlDataReader reader4 = reqjoint.ExecuteReader())
        
            reader4.Read();
            int CodeReservation;
            string StatutReservation, DateReservation;
            CodeReservation = (int)reader4[0];
            StatutReservation = (string)reader4[1];
            DateReservation = (string)reader4[2];
            Console.WriteLine("code reservation:0...);
            reader4.Close();
        
    




catch (Exception e)

    Console.WriteLine(e.Message);

finally

   
    connection.Close();

使用我当前的代码,每个请求只能得到一个结果,但我需要所有数据。

(对不起,英语不是我的母语。)

【问题讨论】:

搜索 MySqlDataAdapter 的工作原理。它允许您获取包含查询返回的所有数据的 DataTable。 DataTable 是一个美化的数组。 我一定要看看谢谢,但由于这是一个学校项目,我应该使用我目前学到的东西希望包括数组 我认为MySqlDataReader 的示例部分是您正在寻找的。​​span> 感谢@DanielDearlove 的答案,但我已经看过它并且它没有显示如何获得多个输出,我做了与示例相同的事情,我只得到一行从桌子上。 查看@DanielDearlove 提到的示例部分,我可以看到答案隐藏在其中的某个地方。检查那里的代码 sn-p 中的单词“while” 【参考方案1】:

感谢所有回答的人,我发现了我的错误,直到你指出并修复它之前我还没有完全理解 while(),除了最后一个 while 需要我在一个 while 循环中打开阅读器(第 3 次和第 4 次请求),我只找到了 this 和 this,我不确定我是否走对了路。 这就是我固定答案的方式:

        //1st request
        using (MySqlDataReader reader1 = requete1.ExecuteReader())
        
            while (reader1.Read())
            
                int CodePassager;
                string Nom, Prenom;
                CodePassager = (int)reader1[0];
                Nom = (string)reader1[1];
                Prenom = (string)reader1[2];

                Console.WriteLine("code: 0...");
            
            reader1.Close();
        

        //2nd request
        using (MySqlDataReader reader2 = requete2.ExecuteReader())
        
            while (reader2.Read())
            
                int CodePassager;
                string Nom, Prenom, Adresse;
                CodePassager = (int)reader2[0];
                Nom = (string)reader2[1];
                Prenom = (string)reader2[2];
                Adresse = (string)reader2[3];
                Console.WriteLine("code: 0...");
            
            reader2.Close();
        

        //3rd request
        using (MySqlDataReader reader3 = requete3.ExecuteReader())
        
            while (reader3.Read())
            
                int CodePassager;
                string Nom, Prenom, Adresse;
                CodePassager = (int)reader3[0];
                Nom = (string)reader3[1];
                Prenom = (string)reader3[2];
                Adresse = (string)reader3[3];
                Console.WriteLine("code: 0...");
                reader3.Close();
                using (MySqlDataReader reader4 = reqjoint.ExecuteReader())
                
                    while (reader4.Read())
                    
                        int CodeReservation;
                        string StatutReservation, DateReservation;
                        CodeReservation = (int)reader4[0];
                        StatutReservation = (string)reader4[1];
                        DateReservation = (string)reader4[2];
                        Console.WriteLine("code...");
                    
                    reader4.Close();
                
            
        
    
    catch (Exception e)
    
        Console.WriteLine(e.Message);
    
    finally
    

        connection.Close();
    

【讨论】:

【参考方案2】:

如上所述,答案在MySqlDataReader 的示例部分,但代码写得不是很好。更好的版本应该清楚如何从选择查询中读取多个值:

public void ReadMyData(string myConnString) 
    string mySelectQuery = "SELECT OrderID, CustomerID FROM Orders";

    using(MySqlConnection myConnection = new MySqlConnection(myConnString))
    using(MySqlCommand myCommand = new MySqlCommand(mySelectQuery,myConnection))
       
        myConnection.Open();

        using(MySqlDataReader myReader = myCommand.ExecuteReader())
        
            // Always call Read before accessing data.
            while (myReader.Read()) 
                Console.WriteLine(myReader.GetInt32(0) + ", " + myReader.GetString(1));
            

            // always call Close when done reading.
            myReader.Close();
        

        // Close the connection when done with it.
        myConnection.Close();
    

许多类型都是一次性的,因此它们可以与using 部分一起使用。此外,MySqlConnection.Close 方法表明它是关闭连接的首选方式,因此应该手动关闭它而不是依赖于处置。我对MySqlDataReader.Close 假设相同,尽管文档没有说明任何内容。

【讨论】:

以上是关于将数组添加到我的 ExecuteReader() 函数的主要内容,如果未能解决你的问题,请参考以下文章

如何将嵌套数组添加到我的模型类

将 int 添加到数组中

如何以编程方式将 UISearchBar 添加到我的 tableView 中?

无法以编程方式将字典数组中的行添加到 NSTable

如何在 Swift 中将数组添加到我的 JSON 字典

如何将对象添加到数组中?