簡體   English   中英

行刪除 ADO.Net, ASP.Net

[英]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。 首先是創建好的命令,其次是作為參數值,這是錯誤的。 在參數值中,您可能必須使用要刪除的值。

您的代碼有幾個嚴重的問題。

  1. 您的連接永遠不會關閉或處理。 使用 Using 塊,即使出現錯誤也會關閉和處理數據庫對象。

  2. 您正在連接一個字符串以使您的 Sql 語句冒着 Sql 注入和損壞數據庫的風險。

  3. 當您的 Sql 語句中沒有參數時,您正在向您的命令添加一個參數。

  4. 您正在使用 .AddWithValue ,它將參數名稱和參數值作為參數。 您已經提供了整個 Sql 語句作為@Name 的值。 這應該是 NameToDelete.Text。

  5. 不要使用 .AddWithValue。 使用 .Add(parameter Name, Sql data type).Value = 參數值。 這可以加快查詢速度並避免數據庫中的類型不匹配。

  6. 如果 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.

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