不使用外键是不好的做法

时间:2013-05-02 10:25:10

标签: c# winforms ms-access

我有一对多关系的父和子表。我所做的是我创建了一个搜索方法,用户可以从父表中找到ID,结果显示在A标签97上。然后,他们将插入子记录并使用标签中显示的结果链接两个表。所以我没有使用@@ identity做外键。所以我的问题是我所做的方法是不好的做法?因为结果在数据库中看起来很好。这是我的代码。谢谢。

Main.cs

    private void btnSearch2_Click(object sender, EventArgs e)
    {
         myCon.Open();
          cmd = new OleDbCommand("SELECT * FROM EmployMainDetails WHERE EID = @EID", myCon);
          cmd.Parameters.AddWithValue("EID", textBox2.Text);
          try
          {
              dreader = cmd.ExecuteReader();
              if (dreader.Read())
              {

                 label97.Text = dreader["EID"].ToString();
              }
                 else MessageBox.Show("No record found");
          }

          catch (Exception)
          {
              MessageBox.Show(" No Record");
          }
          finally
          {
              myCon.Close();
          }
     }

    private void btnJNew_Click(object sender, EventArgs e)
    {
        EEmployDetails.JInsert(txtJobID.Text, label97.Text, cBEmpStatus.Text, ...); 
    }

EmployDetails.cs

这是我的插入方法

 public static void JInsert(string ejobid, string eid, string employst,... )
    {
        var con = GetConnection();
        OleDbCommand cmd = new OleDbCommand();
        cmd.CommandType = CommandType.Text;
        cmd.CommandText = (@"INSERT INTO EmploymentDetails (EJobID, EID, EmploymentStatus,...)
         VALUES(@EJobID, @EID, @EmploymentStatus, ...)");
        cmd.Parameters.AddWithValue("@EJobID", ejobid);
        cmd.Parameters.AddWithValue("@EID", eid);
        cmd.Parameters.AddWithValue("@EmploymentStatus", employst);
        ....
        ...
        cmd.Connection = con;
        con.Open();
        cmd.ExecuteNonQuery();
        con.Close();
    }

1 个答案:

答案 0 :(得分:1)

你的术语似乎很混乱。你说你“没有使用@@ identity完成外键”,但你使用外键,否则父表和子表之间就没有链接。

在您的情况下,EID似乎是子表中的外键,与父表中相应的主键匹配。每个子表也可以定义自己的主键,并且该主键可以是标识列(Access称为“自动编号”字段),但这是一个不同的事情。

所以你已经在使用外键了。 Darren上面的评论指的是“参照完整性”,这是一种确保子记录始终具有相应父记录的机制。这通常称为“外键约束”,在Access中,可以通过在两个表之间创建“关系”然后选择“强制参照完整性”选项来实现

relationship.png