繁体   English   中英

从C#组合框中将ID插入SQL

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM