我是网络开发的初学者。 我已经编写了一个代码,用于输入序列号到文本框中。
OdbcConnection myOdbcConnection = new OdbcConnection(con1);
OdbcCommand myOdbcCommand = myOdbcConnection.CreateCommand();
String sSQL = "SELECT max(slno)+1 FROM driversmaster";
myOdbcCommand.CommandText = sSQL;
myOdbcConnection.Open();
OdbcDataReader myOdbcDataReader = myOdbcCommand.ExecuteReader();
while (myOdbcDataReader.Read() != false)
{
SlnoTxt.Text = myOdbcDataReader[0].ToString().Trim() ;
}
经过艰苦的挣扎,我得到了我需要的东西。但是我不明白我写的代码是什么让我得到答案。为什么我应该使用while循环进行读取,当我可以使用“if statement”时?
请帮助我知道,以便我能很好地理解代码。 提前致谢。
答案 0 :(得分:1)
myOdbcCommand.ExecuteReader();
的结果将在数据库中。考虑结果在查询结果后有10行。 myOdbcDataReader.Read()
一次只能读取一条记录。因此,您需要将此Read()
语句放在循环中以读取所有记录。读取一条记录后,指针将自动指向数据库中的下一条记录。如果您使用的是if
,它会检查查询返回的天气是否有任何结果。这是在执行查询后至少存在一条记录。
在您的情况下,我建议使用
int value=(int)myOdbcCommand.ExecuteScalar();
因为只检索到一个整数值。 / p>
答案 1 :(得分:0)
使用阅读时,您可以处理从查询中获得的所有结果。如果你使用if语句,你将获得第一个结果(如果有的话)并完成。
所以简而言之:只要您只期望一个或没有结果,您就可以使用if。
答案 2 :(得分:0)
在您的情况下,if
语句可以正常工作,因为您只查询一行数据。通常在查询数据库数据时,查询可能会返回多行,在这种情况下,您可以使用Read()
一次一个地前进每行。
在您的情况下,由于您只检索单个值,因此您可能还需要考虑使用ExecuteScalar()
:
object result = myOdbcCommand.ExecuteScalar();
SlnoTxt.Text = result.ToString();