1

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

主文件

    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();
    }
4

1 回答 1

1

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

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

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

关系.png

于 2013-05-02T12:48:47.043 回答