看看这个:
myReader = cmd.ExecuteReader();
if (myReader.HasRows)
{
while (myReader.Read())
{
info = myReader.GetString("info");
...
}
}
.....
嗯,我不知道为什么,但是当我编译它并在另一台 PC 上使用它时,它会因为 while 而爆炸。但如果我这样做:
myReader = cmd.ExecuteReader();
if (myReader.HasRows)
{
if (myReader.Read()) <------------------- NOTICE THE IF
{
info = myReader.GetString("info");
...
}
}
.....
... 会起作用。请注意,由于程序的逻辑,我知道我每次都会只有一个元素。
这样做可以吗?它看起来很糟糕,也许不是一个好的做法 (?)。我问你的方向。
编辑: 将发布更多代码,因为可以帮助查找我的错误:
while (myReader.Read())
{
info = myReader.GetString("info");
...
/**
* Write the relevant info in the LOGS
*/
connection.Close(); <---------- :S
connection.Open(); <---------- if I don´t do this I got some problems with the connection!!!!
string queryLog = "INSERT INTO ....;
MySqlCommand cmdLog = new MySqlCommand(queryLog, connection);
cmdLog.ExecuteNonQuery();
}
最佳答案
只要我期望只有一行,我就会这样做,这没有错。
如果我期望单个值,我会使用 ExecuteScalar
。这将简单地返回结果集第一行第一列中保存的值,通常该集只有一列和一行,因此您往往不会注意到这一点。
此外,我倾向于不理会 if (myReader.HasRows)
,因为 if (myReader.Read())
涵盖了这一点。
我不知道为什么 while
会导致您出现问题...我只是就在 while
上使用 if
提出我的意见> 如果您不希望出现多行。
关于C#:当 Reader 只有一个元素时,我应该使用 "if"而不是 "while"吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8522745/