C#ADO.NET基础二
DataAdapter的使用,批量增删改
1.使用DataAdapter查询

private void Select2() { try { using (SQLiteConnection conn = new SQLiteConnection(connStrl)) { conn.Open(); using (SQLiteCommand cmd = conn.CreateCommand()) { cmd.CommandText = "select name,age from test"; DataTable dataTable = new DataTable(); SQLiteDataAdapter adapter = new SQLiteDataAdapter(cmd); adapter.Fill(dataTable); if (dataTable != null) { for (int i = 0; i < dataTable.Rows.Count; i++) { DataRow row = dataTable.Rows[i]; string name = row["name"].ToString(); int age = int.Parse(row["age"].ToString()); textBox1.Text += $"name:{name} age:{age}\r\n"; } } } } } catch (Exception) { throw; } }
2.批量增

private void btnBatchAdd_Click(object sender, EventArgs e) { try { using (SQLiteConnection conn = new SQLiteConnection(connStrl)) { conn.Open(); using (SQLiteCommand cmd = conn.CreateCommand()) { cmd.CommandText = "select id,name,age from test"; DataTable dataTable = new DataTable(); SQLiteDataAdapter adapter = new SQLiteDataAdapter(cmd); adapter.Fill(dataTable); for (int i = 0; i < 10; i++) dataTable.Rows.Add(null, "张8", 20); SQLiteCommandBuilder builder = new SQLiteCommandBuilder(adapter); adapter.Update(dataTable.GetChanges()); dataTable.AcceptChanges(); } } } catch (Exception ex) { throw; } }
3.批量改

private void btnBatchUpdate_Click(object sender, EventArgs e) { try { using (SQLiteConnection conn = new SQLiteConnection(connStrl)) { conn.Open(); using (SQLiteCommand cmd = conn.CreateCommand()) { cmd.CommandText = "select id,name,age from test"; DataTable dataTable = new DataTable(); SQLiteDataAdapter adapter = new SQLiteDataAdapter(cmd); adapter.Fill(dataTable); foreach (DataRow row in dataTable.Rows) { if (row["name"].ToString() == "张8") row["name"] = "张一"; } SQLiteCommandBuilder builder = new SQLiteCommandBuilder(adapter); adapter.Update(dataTable.GetChanges()); dataTable.AcceptChanges(); } } } catch (Exception ex) { throw; } }
4.批量删
注意:DataTable的删除只能用 dataTable.Rows[i].Delete()不能用DataRow.RemoveAt和DataRow.Remove,否则更新数据库不成功
参考:https://www.cnblogs.com/zouhao/p/9977767.html

private void btnBatchDelete_Click(object sender, EventArgs e) { try { using (SQLiteConnection conn = new SQLiteConnection(connStrl)) { conn.Open(); using (SQLiteCommand cmd = conn.CreateCommand()) { cmd.CommandText = "select id,name,age from test"; DataTable dataTable = new DataTable(); SQLiteDataAdapter adapter = new SQLiteDataAdapter(cmd); adapter.Fill(dataTable); for (int i = 0; i < dataTable.Rows.Count; i++) dataTable.Rows[i].Delete(); SQLiteCommandBuilder builder = new SQLiteCommandBuilder(adapter); adapter.Update(dataTable.GetChanges()); dataTable.AcceptChanges(); } } } catch (Exception ex) { throw; } }
5.总结
针对DataSet或者DataTable进行的增,删,改操作,可以合在一起批量执行。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本