2

Access 2003 VS 2010 C#

誰かelse文のやり方を教えてください。重複レコードが存在するかどうかを確認するためにifステートメントを使用しましたが、挿入コマンドパラメーターが使用されているときにelseステートメントを使用する方法に苦労しています。前もって感謝します

ここに方法があります

  OleDbCommand cmd = new OleDbCommand();
        cmd.CommandType = CommandType.Text;

        using (var command = myCon.CreateCommand())
            {
                command.CommandText = "select * from SomeTable where ID = @ID";
                command.Parameters.AddWithValue("ID", int.Parse(txtID.Text));

                myCon.Open();
                var reader = command.ExecuteReader();
                {
                    if (reader.HasRows)
                    {
                        while (reader.Read())
                        {
                            txtID.Text = reader["ID"].ToString();

                        }
                    } MessageBox.Show("ID Already exist");
                    else (reader.HasRows !=null // need here pls. 
                    {

                      cmd.CommandText = "INSERT INTO SomeTable (ID, AgeGroup, Gender) VALUES (@ID, @AgeGroup, @Gender)";
                      cmd.Parameters.AddWithValue("@ID", txtID.Text);
                      cmd.Parameters.AddWithValue("@AgeGroup", cBAgeGroup.Text);
                      cmd.Parameters.AddWithValue("@Gender", cBGender.Text);
                      cmd.Connection = myCon;
                      cmd.ExecuteNonQuery();
                    }
                 }

                }
                  //  cmd.Connection = myCon;
                  //  cmd.ExecuteNonQuery();
                    myCon.Close();

更新 2 cmd 接続と cmd.ExecuteNonQuery を else ステートメントに移動しました。ID が既に存在するかどうかを確認し、新しいレコードを挿入できます。したがって、コードは正常に実行されています。

アドバイスありがとうございます。

4

1 に答える 1

2

はと の間MessageBoxに属しておらず、直接使用できます。ifelseelse

if (reader.HasRows)
{
    while (reader.Read())
    {
        txtID.Text = reader["ID"].ToString();

    }
} MessageBox.Show("ID Already exist");         // <--- remove this here
else (reader.HasRows !=null // need here pls.  // <--- remove this here

ifしたがって、指定された ID を持つ行があることを検出した場所にメッセージ ボックスを配置します。

if (reader.HasRows)
{
    MessageBox.Show("ID Already exist");
    // ...

次に、 「行がありません」elseの反対がすでにわかっているので、新しいレコードを挿入することができます。HasRows

else
{
  cmd.CommandText = "INSERT INTO SomeTable (ID, AgeGroup, Gender) VALUES (@ID, @AgeGroup, @Gender)";
  // ...

ただし、それがコードの唯一の問題かどうかはわかりません。

更新実際には他にも問題があります。この完全にリファクタリングされたコードを見てください。

string selectSql = "SELECT * FROM SomeTable WHERE ID = @ID";
string insertSql = "INSERT INTO SomeTable (ID, AgeGroup, Gender) VALUES (@ID, @AgeGroup, @Gender)";

int id;
if (!int.TryParse(txtID.Text, out id))
    MessageBox.Show("ID must be an integer.");
else
{
    using (var myCon = new OleDbConnection(connectionString))
    {
        bool idExistsAlready = true;
        using (var selectCommand = new OleDbCommand(selectSql, myCon))
        {
            selectCommand.Parameters.AddWithValue("@ID", id);
            myCon.Open();
            using (var reader = selectCommand.ExecuteReader())
                idExistsAlready = reader.HasRows;
        }
        if (idExistsAlready)
            MessageBox.Show("ID exists already.");
        else
        {
            using (var insertCommand = new OleDbCommand(insertSql, myCon))
            {
                insertCommand.Parameters.AddWithValue("@ID", id);
                insertCommand.Parameters.AddWithValue("@AgeGroup", cBAgeGroup.Text);
                insertCommand.Parameters.AddWithValue("@Gender", cBGender.Text);
                int affectedRecords = insertCommand.ExecuteNonQuery();
            }
        }
    }
}
于 2013-03-27T14:55:43.697 に答える