1

私はWeb開発の初心者です。テキスト ボックスにシリアル番号を入力するためのコードを書きました。

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

多くの苦労の末、私は必要なものを手に入れました。しかし、私が書いたコードが私に答えを得ているのか理解できません。「ifステートメント」を使用できるのに、なぜ読み取りにwhileループを使用する必要があるのですか?

コードをよく理解できるように、教えてください。前もって感謝します。

4

3 に答える 3

1

の結果はmyOdbcCommand.ExecuteReader();デー​​タベースになります。クエリの結果の後に結果が 10 行あるとします。myOdbcDataReader.Read()一度に 1 つのレコードのみを読み取ります。Read()したがって、すべてのレコードを読み取るには、このステートメントをループ内に配置する必要があります。1 つのレコードを読み取った後、ポインタはデータベース内の次のレコードを自動的に指します。使用している場合はif、クエリが結果を返したかどうかを確認します。つまり、クエリの実行後に少なくとも 1 つのレコードが存在するかどうかです。
あなたの場合、
int value=(int)myOdbcCommand.ExecuteScalar();
整数である値が1つだけ取得されるため、使用することをお勧めします。

于 2013-02-11T05:48:52.183 に答える
0

読み取りを使用する場合、クエリから取得したすべての結果を処理します。if ステートメントを使用すると、最初の結果 (ある場合) を取得して完了します。

簡単に言うと、結果が 1 つしかないか、まったく期待できない場合は、if を使用できます。

于 2013-02-11T05:43:12.757 に答える
0

あなたの場合、if1行のデータしかクエリしていないため、ステートメントは機能します。多くの場合、データベース データをクエリする場合、クエリは複数の行を返す可能性があります。その場合、Read()各行を 1 つずつ進めます。

あなたの場合、単一の値しか取得していないため、次の使用を検討することもできますExecuteScalar()

object result = myOdbcCommand.ExecuteScalar();

SlnoTxt.Text = result.ToString();
于 2013-02-11T05:44:44.993 に答える