簡體   English   中英

在Winform C#中刪除列表框數據

[英]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();

如果PIDint數據類型,則將獲得數據轉換錯誤,因為您將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);

如果數據綁定,則在這種情況下需要刷新綁定。

問候一月。

您可以改善以下幾點:

  • 使用參數化命令
  • 不要混用代碼和數據
  • 了解有關SQL注入攻擊的信息
  • 添加錯誤處理代碼
  • 將db代碼與UI清理代碼分離為兩種方法

這可能會解決您的問題。

編輯

如果使用參數化命令,則將其傳遞給類型,以便驅動程序知道如何處理和轉義該類型。 當您將變量嵌入查詢中時,將調用.ToString()方法。 由於錯誤假設字符串表示形式符合您的預期,因此可能會有許多錯誤。 在這種情況下,這將起作用。 但! 在其他情況下,它可能不起作用。 這些錯誤確實很難調試,因為它們僅在某些情況下才會出現。

您可以選擇說該應用程序僅與本地服務器對話。 它永遠不會暴露給網絡。 然后,您換了工作,應用程序突然變得非常成功,並且可以訪問Internet。 你猜怎么着?

如果僅在默認情況下應用防御性編碼,則可以避免許多麻煩。

始終假定環境是敵對的,用戶輸入是邪惡的,並且不信任任何人。 隨時不同意您的警告。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM