1. 程式人生 > >利用OracleCommandBuilder實現 datatable與數據庫的增刪改

利用OracleCommandBuilder實現 datatable與數據庫的增刪改

gpo name ble def nbsp == delete bsp pda

這個數據庫交互的類我是以單例模式實現的,"_"開頭的都是已經生成唯一的實例。

舊數據用sql語句查詢出的dataTable,發生改變後dataTable(增加,刪除,修改),增改是利用OracleCommandBuilder自身Update(table),它可以實現增加和修改(需要主鍵)。

刪除是利用舊datable與修改後的datable之間取交差,獲取需要刪除的數據。

/// <summary>
/// datatable與數據庫的增刪改的實現
/// </summary>
/// <param name="table"></param>
/// <param name="CommandText">sql語句</param>
/// <param name="key"></param>
/// <param name="tableName"></param>
/// <returns></returns>
public int UpdateAndDeleteTable(DataTable table, string CommandText,string key,string tableName)
{
//更新和新增
OracleCommandBuilder ocb = new OracleCommandBuilder(_oracleDataAdapter);
_oracleDataAdapter.SelectCommand.CommandText = CommandText;
_oracleDataAdapter.InsertCommand = ocb.GetInsertCommand();
int updete=_oracleDataAdapter.Update(table);
//刪除:差集刪除
DataTable oldTable = this.GetDataTable(CommandText);
var query = oldTable.AsEnumerable().Except(table.AsEnumerable(), DataRowComparer.Default);
if (query.Count()==0)
{
return updete;
}
StringBuilder sb = new StringBuilder();
sb.Append($"delete {tableName} where {key} in(");

foreach (var row in query)
{
sb.Append("‘"+row[key].ToString()+"‘,");
}
sb.Remove(sb.Length - 1, 1);
sb.Append(")");
string sql = sb.ToString();
int delete = ExcuteSql(sql);
return updete+ delete;
}

利用OracleCommandBuilder實現 datatable與數據庫的增刪改