Database 插入外键ID的值,而不是ID的值
我在VB.net和databases中遇到了一个问题,即在表中插入数据时,我需要插入外键的值,而不是键本身 例如,我有两个表:Employee,Department 使用以下模型Database 插入外键ID的值,而不是ID的值,database,vb.net,Database,Vb.net,我在VB.net和databases中遇到了一个问题,即在表中插入数据时,我需要插入外键的值,而不是键本身 例如,我有两个表:Employee,Department 使用以下模型 Department (DepID pk, DepName) Employee (EmpID pk, EmpName, DepID fk) 使用vb winform将数据插入员工时 我需要在DepID的位置插入DepName(或从combo中选择) NB1:我可以如此轻松地使用MS Access表单,使用列计数和宽度
Department (DepID pk, DepName)
Employee (EmpID pk, EmpName, DepID fk)
使用vb winform将数据插入员工时
我需要在DepID的位置插入DepName(或从combo中选择)
NB1:我可以如此轻松地使用MS Access表单,使用列计数和宽度
NB2:我可以用这种方式选择数据,但我说的是操作数据,比如插入、更新、删除…
需要的是允许用户在插入新员工时选择部门名称。。而不是ID
这正是使用
ValueMember
和DisplayMember
从绑定控件获得的功能:
Dim SQL As String = "Select * FROM Department ORDER BY DeptName"
Using cmd As New OleDbCommand(Sql, dbCon)
myDS = New DataSet("Dept")
Dim da As New OleDbDataAdapter(cmd)
da.Fill(myDS, "Dept")
frmM.cboDept.DisplayMember = "DeptName" ' what to SHOW
frmM.cboDept.ValueMember = "DeptID" ' value to track
frm.cboDept.DataSource = myDS.Tables(0)
End Using
您可以向表单中添加适配器等以跳过代码。CBO中的每个项都将是数据库行对象,但控件将显示由DisplayMember
指示的列中的数据,在本例中为“DeptName”
要获取值,即DeptID:
Private Sub cboDept_SelectedValueChanged(sender, e ...)
myEmployee.DeptID = Convert.ToInt32(cboDept.SelectedValue)
End Sub
使用ValueMember属性,我们使用SelectedValue
属性从cbo中选择的数据行获取DeptID。数据类型将与DB列的数据类型匹配
你可以使用(部门)列表做同样的事情其中Dept是您构建的一个类,用于显示名称,但允许您检索DeptID。类似Dept CBO的控件可以绑定到数据源,然后DisplayMember和ValueMember用于控制显示内容和所选项目的值。仅当我只希望此值独立时,这才起作用,但在我的情况下,我正在插入相关的值,根据建模和关系,employee表中的数据类型od DepID是Number,而不是text..也许您可以添加一些代码来显示您的目标,因为标题没有多大意义。如果您从CBO中选择了一个部门,您是否不希望该部门ID(PK)在Employee表中存储为部门ID(FK)?我打算使用GUI以尽可能少的代码执行此操作。我不知道您是否熟悉MS Access中的此选项。。所需的是允许用户在插入新员工时选择DepName。。而不是ID,,因为用户不应该看到ID,甚至不知道每个DepID属于哪个depName,是的,DepID pk应该作为FK存储在employee中,但是用户应该看到depName,而不是number谢谢你给了我一些好主意;)请随意点击答案旁边的复选标记别担心,一旦我得到我想要的答案,我会毫不犹豫地点击复选标记。。。但是我仍然找不到答案。。我认为VB没有access那样的属性