[英]Insert ID into SQL from C# Combo box
我正在编写的C#程序中有一个下拉列表(combo)框。 -它从数据库中的表中提取数据:
Application_Id | Application
---------------|--------------
1 |Name1
2 |Name2
3 |Name3
下拉框的代码如下所示:
SqlConnection conn = new SqlConnection(SqlCon.DBCON);
conn.Open();
SqlCommand sc = new SqlCommand("select * from Application", conn);
SqlDataReader reader;
reader = sc.ExecuteReader();
DataTable dt = new DataTable();
dt.Columns.Add("ApplicationId", typeof(int));
dt.Columns.Add("Application_Name", typeof(string));
dt.Load(reader);
App.ValueMember = "ApplicationId";
App.DisplayMember = "Application_Name";
App.DataSource = dt;
conn.Close();
基本上,用户选择应用程序的名称并按下“插入”按钮。 然后,我希望将此应用程序的相关ID发布到数据库中的另一个表。 (帐户表)。 -我确实将此设置设置为主键-外键关系,但是为了测试,我删除了该关系。
我插入数据库的代码是这样的:
SqlConnection conn = new SqlConnection(SqlCon.DBCON);
conn.Open();
using (SqlCommand AQuery = conn.CreateCommand())
{
AQuery.CommandText = "INSERT INTO Accounts(AccountName,Application_Id,num_Users) VALUES(@param1,@param2,@param3)";
AQuery.Parameters.Add(new SqlParameter("@param1", account.Text));
AQuery.Parameters.Add(new SqlParameter("@param2", App.ValueMember));
AQuery.Parameters.Add(new SqlParameter("@param3", users.Text));
AQuery.ExecuteNonQuery();
}
我的问题是,按“插入”时出现异常。 (一切都编译)
异常指出:
将nvarchar值'ApplicationId'转换为数据类型int时,错误转换失败。
-我尝试过:CAST CONVERT
在插入语句之前将值成员转换为应用程序中的int,仍然是相同的错误。
我究竟做错了什么? -它不是试图将实际的字符串'ValueMember'转换为int吗?
该参数应使用
AQuery.Parameters.Add(new SqlParameter("@param2", Convert.ToInt32(App.SelectedValue)));
您的代码使用ValueMember
属性(而不是值)作为列名(字符串)。 但是,应添加一些错误检查,以确保在组合框中选择了某些内容
if(app.SelectedValue == null)
{
MessageBox.Show("Select an app");
return;
}
附带说明,在读取组合框的值时,我建议仅使用填充组合框所需的字段,而不是加载所有字段,然后手动构建只有两列的数据表
using(SqlConnection conn = new SqlConnection(SqlCon.DBCON))
using(SqlCommand sc = new SqlCommand(@"select ApplicationId, Application_Name
from Application", conn))
{
conn.Open();
using(SqlDataReader reader = sc.ExecuteReader())
{
DataTable dt = new DataTable();
dt.Load(reader);
.....
我认为您需要SelectedValue才能从组合框中检索选定的值,因此:
App.SelectedValue
SelectedValue属性:获取或设置ValueMember属性指定的成员属性的值。
您可以在获取该值时设置一个断点,以检查返回的内容以确保它是一个数字。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.