从c#组合框中插入ID到SQL
本文关键字:ID SQL 插入 组合 | 更新日期: 2023-09-27 18:09:08
我正在编写的c#程序中有一个下拉(组合)框。-它从我的数据库中的一个表中提取数据:
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到我的数据库中的另一个表。(账户表)。-I确实设置了主键和外键的关系,但是为了测试,我删除了这个关系。
我插入数据库的代码是这样的:
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时,转换失败。
-I have try:投将
在应用程序插入语句之前将valuemember转换为int,仍然是相同的错误。
我做错了什么?-它不是试图转换实际字符串'ValueMember'到int是吗??
我认为您需要SelectedValue从组合框中检索选中的值,所以:
App.SelectedValue
SelectedValue Property:获取或设置ValueMember属性指定的成员属性的值。
您可以在检索值时设置一个断点,以检查返回的内容,以确保它是一个数字。
参数初始化为
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);
.....