将数组添加到我的 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() 函数的主要内容,如果未能解决你的问题,请参考以下文章