C# 如何将文本字段中的数据插入数据库中的外键

C# 如何将文本字段中的数据插入数据库中的外键,c#,mysql,sql,visual-studio,qsqlquery,C#,Mysql,Sql,Visual Studio,Qsqlquery,如何将文本字段中的数据插入数据库中的外键。基本上,我有名为Employee和Role的表,RoleId是Employee中的外键,但Role文本字段是字符串。 我有这个 String Query = "insert into EMPLOYEE (LastName,FirstName,Manager,RoleId,HireStatus) values('" + this.txtLName.Text + "','" + this.txtFName.Text + "','" + this.txtMan

如何将文本字段中的数据插入数据库中的外键。基本上,我有名为Employee和Role的表,RoleId是Employee中的外键,但Role文本字段是字符串。 我有这个

String Query = "insert into EMPLOYEE (LastName,FirstName,Manager,RoleId,HireStatus) values('" + this.txtLName.Text + "','" + this.txtFName.Text + "','" + this.txtManager.Text + "','"  + this.txtRoleId.Text + "','" + this.txtHireStatus.Text + "');";

已编辑-我有此选项,但不能使用以下字符串进行选择

string Query = "insert into EMPLOYEE(LastName,FirstName,RoleId,Manager,HireStatus) values('" + this.txtLName.Text + "','" + this.txtFName.Text + "','" + ( SELECT RoleId From Role WHERE Role.RoleId = this.txtRole.Text ) +  "','" + this.txtManager.Text +  "','" + this.cmbHireStatus.Text + "');";

我认为你应该这样做:

String Query = "insert into EMPLOYEE (LastName,FirstName,Manager,RoleId,HireStatus) values('" + this.txtLName.Text + "','" + this.txtFName.Text + "','" + this.txtManager.Text + "','" + this.txtRoleId.Text + "','" + this.txtHireStatus.Text + "');";

我认为你应该这样做:

String Query = "insert into EMPLOYEE (LastName,FirstName,Manager,RoleId,HireStatus) values('" + this.txtLName.Text + "','" + this.txtFName.Text + "','" + this.txtManager.Text + "','" + this.txtRoleId.Text + "','" + this.txtHireStatus.Text + "');";

如果您试图添加分配给现有角色的新员工,那么更好的设计是使用一个填充了所有角色的
下拉列表
,而不是一个供用户输入的
文本框

下拉列表中应填写Roles表中的所有角色。(将下拉列表的
SelectedValue
属性映射到-RoleId,并将
SelectedText
映射到RoleName)

提交表单时,您将获得SelectedValue(RoleId),您可以将其作为
INSERT
语句的一部分直接发送,即
dropDownRole.SelectedValue
而不是
txtRoleId.Text

注意:您的insert查询似乎是的经典候选查询。我建议你把它改成

更新:现在我知道它是一个Winforms应用程序,添加了更详细的代码片段。下面是如何在Win Forms世界中实现这一点(虽然不如web app world直观:)。请耐心听我说,我已经多年没有编写winforms代码片段了

像这样定义您的下拉组合框-

cbxRole.DataSource = roles; // data from back end
cbxRole.Name = "Role";
cbxRole.DropDownStyle = ComboBoxStyle.DropDownList;
cbxRole.DisplayMember = "RoleName"; // should match the property name in your roles data table
cbxRole.ValueMember = "RoleId"; // should match the property name in your roles data table
cbxRole.SelectedItem = null;
cbxRole.SelectedText = "Select Role";
观察
ValueMember
DisplayMember
属性
DisplayMember
说明角色数据源中用于显示为下拉项文本的属性
ValueMember
指定用于在幕后标识每个项目的属性

提交详细信息时,请访问SelectedValue属性以获取与所选角色名称对应的角色ID

private void btnCreate_Click(object sender, EventArgs e)
{
    var firstName = txtFirstName.Text;
    var lastName = txtLastName.Text;
    var roleId = (int)cbxRole.SelectedValue;
}
SelectedValue
属性获取下拉定义中由
ValueMember
属性标识的列的值,即RoleId值。现在,您可以将此“roleId”变量的值发送到insert查询

下面是您提交时的情况-

这是一个快速的UI示例-

如果您试图添加分配给现有角色的新员工,那么更好的设计是使用一个填充了所有角色的
下拉列表,而不是一个供用户输入的
文本框

下拉列表中应填写Roles表中的所有角色。(将下拉列表的
SelectedValue
属性映射到-RoleId,并将
SelectedText
映射到RoleName)

提交表单时,您将获得SelectedValue(RoleId),您可以将其作为
INSERT
语句的一部分直接发送,即
dropDownRole.SelectedValue
而不是
txtRoleId.Text

注意:您的insert查询似乎是的经典候选查询。我建议你把它改成

更新:现在我知道它是一个Winforms应用程序,添加了更详细的代码片段。下面是如何在Win Forms世界中实现这一点(虽然不如web app world直观:)。请耐心听我说,我已经多年没有编写winforms代码片段了

像这样定义您的下拉组合框-

cbxRole.DataSource = roles; // data from back end
cbxRole.Name = "Role";
cbxRole.DropDownStyle = ComboBoxStyle.DropDownList;
cbxRole.DisplayMember = "RoleName"; // should match the property name in your roles data table
cbxRole.ValueMember = "RoleId"; // should match the property name in your roles data table
cbxRole.SelectedItem = null;
cbxRole.SelectedText = "Select Role";
观察
ValueMember
DisplayMember
属性
DisplayMember
说明角色数据源中用于显示为下拉项文本的属性
ValueMember
指定用于在幕后标识每个项目的属性

提交详细信息时,请访问SelectedValue属性以获取与所选角色名称对应的角色ID

private void btnCreate_Click(object sender, EventArgs e)
{
    var firstName = txtFirstName.Text;
    var lastName = txtLastName.Text;
    var roleId = (int)cbxRole.SelectedValue;
}
SelectedValue
属性获取下拉定义中由
ValueMember
属性标识的列的值,即RoleId值。现在,您可以将此“roleId”变量的值发送到insert查询

下面是您提交时的情况-

这是一个快速的UI示例-

this.txtRoleId
您在这方面有什么价值?我想你应该做这个.txtRoleId.Text
?事实上,那是个错误。忘记添加。文本。我的RoleId是一个int,但在我的角色表中,我有一个字符串角色列,它是文本字段中的内容。该角色文本是角色表中现有的文本吗?或者它也是您试图添加的新角色?角色文本即txtRoleId是我表单上文本字段的名称。您在
this.txtRoleId
textbox中输入的值是什么?
this.txtRoleId
您在其中有什么值?我想你应该做这个.txtRoleId.Text
?事实上,那是个错误。忘记添加。文本。我的RoleId是一个int,但在我的角色表中,我有一个字符串角色列,它是文本字段中的内容。该角色文本是角色表中现有的文本吗?或者它也是您试图添加的新角色?角色文本即txtRoleId是我表单上文本字段的名称。您在
此.txtRoleId
文本框中输入的值是多少?实际上我刚刚编辑了它,忘记添加.text。我正在寻找一种将数据添加到外键中的方法。您应该添加“每个值都是stringMy bad,我实际上是这样做的,但是在数据库中出现一个错误,说文本字段角色是int。如果值是整数字符串:Int32.Parse(this.txtRoleId.text)并删除“如果值是string,我想你应该把这个字段的数据类型改为varchar,而不是intI。实际上我刚刚编辑了它,我忘了添加.Text。我正在寻找一种将数据添加到外键的方法。您应该添加“每个值都是stringMy bad,我实际上是这样做的,但是在数据库中出现一个错误,说文本字段角色是int。如果值是整型字符串:Int32.Parse(this.txtRoleId.text)并删除“如果值是string,我认为您应该更改此字段的数据类型。”