利用OracleCommandBuilder实现 datatable与数据库的增删改
?
這個(gè)數(shù)據(jù)庫(kù)交互的類(lèi)我是以單例模式實(shí)現(xiàn)的,"_"開(kāi)頭的都是已經(jīng)生成唯一的實(shí)例。
舊數(shù)據(jù)用sql語(yǔ)句查詢出的dataTable,發(fā)生改變后dataTable(增加,刪除,修改),增改是利用OracleCommandBuilder自身Update(table),它可以實(shí)現(xiàn)增加和修改(需要主鍵)。
刪除是利用舊datable與修改后的datable之間取交差,獲取需要?jiǎng)h除的數(shù)據(jù)。
?
/// <summary>
/// datatable與數(shù)據(jù)庫(kù)的增刪改的實(shí)現(xiàn)
/// </summary>
/// <param name="table"></param>
/// <param name="CommandText">sql語(yǔ)句</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;
}
轉(zhuǎn)載于:https://www.cnblogs.com/wxdgis/p/8270482.html
總結(jié)
以上是生活随笔為你收集整理的利用OracleCommandBuilder实现 datatable与数据库的增删改的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 实用工具---制作试卷
- 下一篇: freertos之任务