在ExecuteReader()函数中添加数组



我试图从我在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();
}

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

(对不起,英语不是我的第一语言。)

如上所述,答案在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是相同的,尽管文档没有说什么。

感谢所有回答的人,我发现了我的错误,我还没有完全理解while(),直到你指出它,我得到了修复,除了最后一段时间,这需要我在一个开放的读者(第3和第4个请求)有一个while循环,我只发现这个和这个,我不确定我是否朝着正确的方向前进。这是我如何固定我的答案:

//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();
}
}

}

最新更新