在select命令执行c#后,if / else语句是否为insert命令参数?

时间:2013-03-27 14:48:56

标签: c# ms-access

Access 2003 VS 2010 C#

请有人帮我怎么做其他声明。我使用if语句检查是否存在重复记录,并且在使用insert命令参数时我正在努力研究如何使用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是否已存在并能够插入新记录。所以代码正在执行它应该是。

谢谢大家的建议。

1 个答案:

答案 0 :(得分:2)

MessageBox不属于ifelse之间,您可以直接使用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();
            }
        }
    }
}