2

访问 2003 与 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 我在 else 语句中移动了 cmd 连接和 cmd.ExecuteNonQuery。我能够检查 id 是否已经存在并能够插入新记录。所以代码正在按原样执行。

谢谢大家的建议。

4

1 回答 1

2

theMessageBox不属于 theif和 the之间else,可以else直接使用:

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 回答