2016-02-28 100 views
0

以下是我所做的完整代碼。所以基本上我創建了一個DataTable,然後我將我的DataTable連接到一個數據庫。我可以通過ID編輯人員,但我不知道如何通過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(); 
} 

回答

2

使用此代碼從數據庫中刪除編號:

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

更新:試試這個 - 從數據表

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

我得到錯誤在t他的第一個案例:可能意外的參考比較;爲了得到一個值的比較,左手邊輸入'string'' /在第二個,我不想使用LINQ,因爲我還不知道它 –

+0

更新了答案。我希望這會對你有用! –