1

ユーザーが指定した名前がデータベースに存在するかどうかを確認する while ステートメントを作成しようとしています。そうでない場合は、名前がデータベースに存在するまで再度入力する必要があります。

「データが存在しない場合、無効な読み取り試行です」というメッセージが表示されます。2 番目の while ループで例外が発生します。私は何をすべきか?

SqlDataReader reader = com.ExecuteReader();

while (reader.Read())
{
    string FirstName1 = (string)reader["FirstName"].ToString();

    if (FirstName1 != param.ToString())
    {
        Console.WriteLine();
        Console.WriteLine("Permision Grantet for: {0}",FirstName1);
    }

    return;
}

while (!reader.Read())
{
    string firstname2 = (string)reader["FirstName"].ToString();

    if (firstname2 != param.ToString())
    {

        Console.WriteLine("Permision Grantet for: {0}", firstname2);
    }

}

cn.Close();
4

2 に答える 2

1

SqlDataReader にデータがないため、2 番目の while ステートメントは失敗しています。その正確な状態をチェックしています!reader.Read。次に while ループの中で、リーダーからデータを読み込もうとしています。

ここにはコードの一部が欠けているように感じますが、あなたが持っているものに基づいて、2番目の if ステートメントを最初の while ループに引っ張って、else にすることができます。最初のチェックに合格した場合は、必ずループを終了してください。

于 2013-07-25T13:21:19.543 に答える
1

これは、特定のケースに対して私が行うことです。param が入力変数であると想定し、ユーザーが間違ったユーザー名を入力すると、ゼロが入力されるまでユーザー名の入力を繰り返し求められるというシナリオも取りました。

while(param != "0")
{
  Console.WriteLine("Enter Username: ");
  param = Console.ReadLine();

  com = new SqlCommand("Select username from table_name", cn); 
  SqlDataReader reader = com.ExecuteReader();

  if( reader.HasRows)
  {
    while (reader.Read())
    {
      string FirstName1 = reader["FirstName"].ToString();

      if (FirstName1 != param.ToString()) 
      {
         Console.WriteLine();
         Console.WriteLine("Permission Granted for: {0}",FirstName1);
         param = 0;
      }

      return;
    }
  }

  else
  {
    Console.WriteLine();
    Console.WriteLine("Invalid username! Please try again. To quit, press 0.");
  }
 }
 cn.Close();
于 2013-07-26T17:46:53.190 に答える