从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是吗??

从c#组合框中插入ID到SQL

我认为您需要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);
          .....