[英]Row Deletion ADO.Net, ASP.Net
我正在嘗試使用聯系人列表,並希望在我輸入某人的姓名時刪除他們的所有信息。 我正在使用一個名為聯系人的 sql 表,其中包含聯系人的姓名、電子郵件和地址。 我有以下代碼:
protected void Delete_Click(object sender, EventArgs e)
{
SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["dbconnect"].ConnectionString);
con.Open();
string delete = "DELETE FROM Contact WHERE Name =" + NameToDelete.Text;
SqlCommand cmd = new SqlCommand(delete, con);
try
{
cmd.Parameters.AddWithValue("@Name", delete);
cmd.ExecuteNonQuery();
Response.Redirect("ViewContacts.aspx");
}
catch(Exception ex)
{
Response.Write(ex);
}
}
當我使用它時,它似乎將列名稱與我輸入的名稱進行比較。因此名稱 Bill 與列標題 Name 而不是名稱中的內容進行比較。
您需要在 var(char) 類型的值周圍使用單引號。 如果您不使用引號,它會認為您引用的是列名而不是值。 它對所有數據庫都有效,以下來自oracle docs:
字符文字用單引號括起來,這使 Oracle 能夠將它們與模式對象名稱區分開來。
https://docs.oracle.com/cd/A87860_01/doc/server.817/a85397/sql_elem.htm
string delete = "DELETE FROM Contact WHERE Name ='" + NameToDelete.Text + "'";
實際上你想要做的是使用 sqlcommand 參數,那么你需要在 sql 語句中使用 @[ParameterName] 使用參數名稱。
string delete = "DELETE FROM Contact WHERE Name = @Name";
似乎您的問題是您在兩個實例中都使用了變量 delete。 首先是創建好的命令,其次是作為參數值,這是錯誤的。 在參數值中,您可能必須使用要刪除的值。
您的代碼有幾個嚴重的問題。
您的連接永遠不會關閉或處理。 使用 Using 塊,即使出現錯誤也會關閉和處理數據庫對象。
您正在連接一個字符串以使您的 Sql 語句冒着 Sql 注入和損壞數據庫的風險。
當您的 Sql 語句中沒有參數時,您正在向您的命令添加一個參數。
您正在使用 .AddWithValue ,它將參數名稱和參數值作為參數。 您已經提供了整個 Sql 語句作為@Name 的值。 這應該是 NameToDelete.Text。
不要使用 .AddWithValue。 使用 .Add(parameter Name, Sql data type).Value = 參數值。 這可以加快查詢速度並避免數據庫中的類型不匹配。
如果 name 是您的主鍵,則可以,但如果不是,則應按主鍵刪除或發送 Where 子句中的所有值。
protected void Delete_Click(object sender, EventArgs e) { using (SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["dbconnect"].ConnectionString)) { string delete = "DELETE FROM Contact WHERE Name = @Name;"; //no single quotes to worry about using (SqlCommand cmd = new SqlCommand(delete, con)) { cmd.Parameters.Add("@Name", SqlDbType.VarChar).Value = NameToDelete.Text; //just guessed at the VarChar - check your database for type try { con.Open(); cmd.ExecuteNonQuery(); Response.Redirect("ViewContacts.aspx"); } catch (Exception ex) { Response.Write(ex.Message); //ex by itself, will get you nothing but the fully qualified name of Exception } } } }
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.