2014-06-18 60 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); 
      .....