[英]delete listbox data in winform C#
我想使用C#WinForm應用程序中的ListBox從數據庫中刪除數據。 我正在嘗試此代碼,但無法正常工作。 請告訴我如何從列表框刪除數據
這給了我這個錯誤
將varchar值'System.Data.DataRowView'轉換為數據類型int時,轉換失敗。
string i= listBox1.SelectedItem.ToString();
SqlConnection con = new SqlConnection();
con.ConnectionString = ConfigurationManager.ConnectionStrings["con"].ConnectionString;
con.Open();
SqlCommand CmdAddProof = new SqlCommand("delete from Tb_IdProof where PID='" + i+ "'", con);
CmdAddProof.CommandType = CommandType.Text;
CmdAddProof.ExecuteNonQuery();
textBox1.Text = string.Empty;
ShowProof();
con.Close();
如果PID
是int
數據類型,則將獲得數據轉換錯誤,因為您將ID值作為varchar
而不是int
傳遞。
從命令文本中刪除單引號將解決此問題:
SqlCommand CmdAddProof = new SqlCommand("delete from Tb_IdProof where PID=" + i, con);
根據用戶編輯以下更多評論
因為它表明ListBox
實際上是數據綁定的,所以您正在接收該錯誤,因為SelectedItem
屬性將返回DataRowView
而不是值。
在調用SqlCommand
之前,您需要從DataRowView
對象獲取PID
列的值。
是手動生成的還是數據綁定的?
如果手動生成使用
listBox1.Items.Remove(i);
如果數據綁定,則在這種情況下需要刷新綁定。
問候一月。
您可以改善以下幾點:
這可能會解決您的問題。
編輯
如果使用參數化命令,則將其傳遞給類型,以便驅動程序知道如何處理和轉義該類型。 當您將變量嵌入查詢中時,將調用.ToString()
方法。 由於錯誤假設字符串表示形式符合您的預期,因此可能會有許多錯誤。 在這種情況下,這將起作用。 但! 在其他情況下,它可能不起作用。 這些錯誤確實很難調試,因為它們僅在某些情況下才會出現。
您可以選擇說該應用程序僅與本地服務器對話。 它永遠不會暴露給網絡。 然后,您換了工作,應用程序突然變得非常成功,並且可以訪問Internet。 你猜怎么着?
如果僅在默認情況下應用防御性編碼,則可以避免許多麻煩。
始終假定環境是敵對的,用戶輸入是邪惡的,並且不信任任何人。 隨時不同意您的警告。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.