2014-06-18 62 views
0

我在我正在编写的C#程序中有一个下拉(组合)框。 - 它通过拉其数据从一个表在我的数据库:从C#组合框中插入ID到

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时转换失败。

-I曾尝试: CAST CONVERT

转换的valuemember插入语句,还是同样的错误之前,在应用为int。

我在做什么错? - 它不试图将实际的字符串'ValueMember'转换为int是吗?

+0

什么数据类型是SQL Server中的ApplicationId? – CSharper

回答

1

我想你需要的SelectedValue检索从组合框中选择的值,所以:

App.SelectedValue 

SelectedValue属性:获取或设置由ValueMember属性指定的成员属性的值。

您可以在检索值时设置断点以检查返回的内容以确保它是一个数字。

+1

美丽。快速回答,工作。 - 我的错,但是谢谢你! –

1

参数应与

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); 
      .....