簡體   English   中英

如何從數據表和數據庫中按ID刪除行

[英]How to Delete Row By ID From Datatable and Database

這是我目前所做的全部代碼。 所以基本上我是在創建DataTable ,然后將DataTable與數據庫連接。 我可以按ID編輯人員,但我不知道如何按ID刪除人員。 我要刪除整行。

同樣,在編輯DataTable的部分中,如果選擇不編輯表,則會出現一些空引用錯誤

你調用的對象是空的。

我的代碼:

        /*
        * Creating DataTable
        */

        DataTable dt = new DataTable();
        dt.Columns.Add(new DataColumn("ID", typeof(int)));
        dt.Columns.Add(new DataColumn("Vards", typeof(string)));
        dt.Columns.Add(new DataColumn("Uzvards", typeof(string)));

        /*
        * Connecting to DataBase
        */

        string ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=\"datubaze.accdb\"";
        OleDbConnection con = new OleDbConnection(ConnectionString);
        OleDbCommand cmd = new OleDbCommand("SELECT * FROM PERSONA", con);
        con.Open();
        OleDbDataReader dataReader = cmd.ExecuteReader();

        while (dataReader.Read())
        {
             DataRow dr = dt.NewRow();
             dr["ID"] = dataReader["ID"];
             dr["Vards"] = dataReader["Vards"];
             dr["Uzvards"] = dataReader["Uzvards"];
             dt.Rows.Add(dr);
        }

        con.Close();
        dt.AcceptChanges();
        PrintDataTable(dt);

        Console.WriteLine();


         /* Edit Person in DataTable */

        Console.WriteLine("Kuru ID vēlaties labot?");
        int labosana = Convert.ToInt32(Console.ReadLine());

        Console.WriteLine("Vai tiešām vēlaties labot šo ierakstu?");
        string vaiLabot = Console.ReadLine();

        if (vaiLabot == "yes")
        {
            Console.WriteLine("Ievadiet jauno vārdu:");
            string vards = Console.ReadLine();

            Console.WriteLine("Ievadiet jauno uzvārdu:");
            string uzvards = Console.ReadLine();

            dt.Rows[labosana-1]["Vards"] = vards;
            dt.Rows[labosana-1]["Uzvards"] = uzvards;
        }
        else
        {
            Console.WriteLine("Jūs atteicāties labot!");
        }

        /*
        * Adding Edited Person to Database
        */

        OleDbCommand upCmd = new OleDbCommand("UPDATE PERSONA SET Vards=?,Uzvards=? WHERE ID=?", con);
        upCmd.Parameters.Add(new OleDbParameter("@Vards",OleDbType.VarChar));
        upCmd.Parameters.Add(new OleDbParameter("@Uzvards", OleDbType.VarChar));
        upCmd.Parameters.Add(new OleDbParameter("@ID", OleDbType.Integer));

        foreach(DataRow dro in dt.GetChanges().Rows)
        {

         if (dro.RowState == DataRowState.Modified)
         {
             upCmd.Parameters[0].Value = dro[1];
             upCmd.Parameters[1].Value = dro[2];
             upCmd.Parameters[2].Value = dro[0];
             con.Open();
             upCmd.ExecuteNonQuery();
             con.Close();
         }

        }

我嘗試了很多代碼。 但是它們似乎都不起作用。 嘗試過類似的操作,以按名稱刪除。

for(int i = dt.Rows.Count-1; i >= 0; i--)
{
    DataRow dr = dt.Rows[i];
    if (dr["Vards"] == "Name")
        dr.Delete();
}

使用此代碼從數據庫中按ID刪除:

public int DeleteById(int Id)
{
        string ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=\"datubaze.accdb\"";

        OleDbConnection con = new OleDbConnection(ConnectionString);
        OleDbCommand cmd = new OleDbCommand("DELETE FROM PERSONA WHERE ID = @ID", con);
        cmd.Parameters.Add(new OleDbParameter("ID", Id));

        return cmd.ExecuteNonQuery();
}

更新:嘗試此操作-從數據表中刪除

    DataRow rowToBeDeleted;
for(int i = dt.Rows.Count-1; i >= 0; i--)
    {
        DataRow dr = dt.Rows[i];
        if (dr["Vards"] == "Name")
rowToBeDeleted = dr;            

    }

dt.Rows.Remove(rowToBeDeleted );

或者,如果使用LINQ,您也可以執行類似的操作

var dr = dt.AsEnumerable().Where(row => row.Field<string>("Vards") == "Name").SingleOrDefault();
            dt.Rows.Remove(dr);

暫無
暫無

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

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