简体   繁体   English

如何从数据表和数据库中按ID删除行

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

Here is full code at the moment what I have done. 这是我目前所做的全部代码。 So basically I'm creating a DataTable , then I'm connecting my DataTable with a database. 所以基本上我是在创建DataTable ,然后将DataTable与数据库连接。 I can edit person by ID, but I don't know how to delete person by ID. 我可以按ID编辑人员,但我不知道如何按ID删除人员。 I want a full row to be deleted. 我要删除整行。

As well, in the part where I edit the DataTable , if I choose not to edit table, I get some null reference error 同样,在编辑DataTable的部分中,如果选择不编辑表,则会出现一些空引用错误

Object reference not set to an instance of an object. 你调用的对象是空的。

My code: 我的代码:

        /*
        * 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();
         }

        }

I tried a ton of code. 我尝试了很多代码。 But none of them seems to work. 但是它们似乎都不起作用。 Tried something like this to delete by the Name. 尝试过类似的操作,以按名称删除。

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

Use this code for deleting by Id from database: 使用此代码从数据库中按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();
}

Updated: try this -- To delete from the DataTable 更新:尝试此操作-从数据表中删除

    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 );

Or if using LINQ, you can also do something like 或者,如果使用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