2014-10-29 119 views
0

我有一個asp.net窗體與C#代碼後面和窗體上我有一個CheckBoxList。理想情況下,用戶可以使用此CheckBoxList來選擇適用於它們的多個項目,並將所有選擇插入到SQL數據庫的單個列中,每個選擇之間用逗號分隔。下面是我當前的CheckBoxList INSERT代碼,但是當我查詢SSMS上的SQL表時,CheckBoxList列顯示爲'NULL'。插入多個複選框選擇到一個數據庫列

金字塔是數據庫表的名稱。 CheckBoxListFruits是CheckBoxList控件的名稱,Favorite Fruits是我嘗試插入信息的列的名稱。

using (SqlCommand cmd = new SqlCommand()) 
{ 
    cmd.CommandText = "INSERT INTO Pyramid set IsSelected = @IsSelected" + " WHERE Favorite [email protected]"; 
    foreach (ListItem item in CheckBoxListFruits.Items) 
    { 
     cmd.Parameters.AddWithValue("@IsSelected", item.Selected); 
     cmd.Parameters.AddWithValue("@Fruits", item.Value); 
    } 
} 

我的代碼有什麼問題,我該如何解決它?

+0

你調試了你的代碼嗎?你確定你的值不是'空'嗎?你的'CommandText'也不需要'+'。 – 2014-10-29 18:39:50

+4

*「所有選擇插入到SQL數據庫中的單個列中,每個選擇之間用逗號分隔。」*請爲所有愛情做好準備,不要這樣做......閱讀正常化! – mituw16 2014-10-29 18:40:38

+0

具體來說,請閱讀[第一範式](http://en.wikipedia.org/wiki/First_normal_form)。你不必記住正常的形式,但認識到它們背後的原則是非常重要的。 – mason 2014-10-29 18:56:54

回答

1

這是錯誤的INSERT語法。正確INSERT命令語法是

INSERT INTO table_name(col1,col2,col3,...,coln) VALUES(val1,val2,val3,...,valn); 

你的意思是有一個UPDATE命令像下面

UPDATE Pyramid set IsSelected = @IsSelected WHERE [Favorite Fruits] = @Fruits; 

數點需要注意:

Favorite Fruits在它足夠的空間,所以你應該逃避它使用[ ]

@SonerGonul提到的命令文本中不需要+

@ mituw16指出了一件非常重要的事情;不要在列中存儲逗號分隔值。這不僅僅是針對Normalization的概念,而且當您想要爲該列選擇/比較數據時也會遇到麻煩。

1

我建議有一個單獨的表爲最喜歡的水果,而不是一列,然後插入或相應地刪除。 因此,用戶(用戶ID,名稱)和用戶喜歡userflavoritefruits(用戶ID,名稱)的用戶表(用戶ID,名稱)

您的插入語句的語法是錯誤的,但是你陷入的問題比那種具有非規範化結構的問題要大。

祝你好運。

+0

現貨。埃內斯托建立在mituw16的評論之上,重新正常化。 SQL在從表中選擇數據時非常健壯 - 但在解析字段中的排列數據時,SQL沒有那麼高效。 – 2016-01-02 14:27:57

相關問題