C#中使用LINQtoSQL管理SQL数据库之添加、修改和删除
目录
一、添加数据
二、修改数据
三、删除数据
四、添加、修改和删除的源码
五、生成效果
1.VS和SSMS原始记录
2.删除ID=2和5的记录
3.添加记录ID=2、5和8
4.修改ID=3和ID=4的记录
用LINQtoSQL管理SQL Server数据库时,主要有添加、修改和删除3种操作。
项目中创建LINQtoSQL类的方法已经在本文作者的其他文章中有过叙述,此处不再赘述。
一、添加数据
使用LINQ向SQL Server数据库中添加数据时,需要使用InsertOnSubmit()方法和SubmitChanges()方法。其中,InsertOnSubmit()方法用来将处于pending insert状态的实体添加到SQL数据表中,其语法格式如下:
void InsertOnSubmit(Object entity)
其中,entity表示要添加的实体。
SubmitChanges()方法用来记录要插入、更新或删除的对象,并执行相应命令以实现对数据库的更改,其语法格式如下:
public void SubmitChanges()
二、修改数据
使用LINQ修改SQL Server数据库中的数据时,需要用SubmitChanges()方法。
三、删除数据
使用LINQ删除SQL Server数据库中的数据时,需要使用DeleteAllOnSubmit()方法和SubmitChanges()方法。
DeleteAllOnSubmit()方法用来将集合中的所有实体置于pending delete状态
void DeleteAllOnSubmit(IEnumerable entities)
其中,entities表示要移除所有项的集合。
四、添加、修改和删除的源码
//Form1.cs
//使用LINQ管理SQL Server数据库
//对数据库添加、删除、修改
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.Linq;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Xml.Linq;namespace _07
{public partial class Form1 : Form{public Form1(){InitializeComponent();}//定义数据库连接字符串public string strCon = "Data Source=DESKTOP-S11C97H\\SQLEXPRESS;Initial Catalog=db_CSharp;Integrated Security=True;";DataClasses1DataContext _Linq; //声明Linq连接对象public string _strID = ""; //记录选中的员工编号/// <summary>/// 初始化Form1/// 调用方法,在datagridview1中显示数据库/// </summary>private void Form1_Load(object sender, EventArgs e){label1.Text = "编码:";label2.Text = "姓名:";label3.Text = "年龄:";label4.Text = "电话:";label5.Text = "地址:";label6.Text = "QQ:";label7.Text = "EMAIL:";label8.Text = "性别:";button1.Text = "添加";button2.Text = "删除";button3.Text = "修改";groupBox1.Text = "员工信息";comboBox1.Items.AddRange(new object[] {"男","女"});textBox1.Size = new System.Drawing.Size(100,21);textBox2.Size = new System.Drawing.Size(100, 21);textBox3.Size = new System.Drawing.Size(40, 21);textBox4.Size = new System.Drawing.Size(100, 21);textBox5.Size = new System.Drawing.Size(100, 21);textBox6.Size = new System.Drawing.Size(100, 21);textBox7.Size = new System.Drawing.Size(100, 21);comboBox1.Size = new System.Drawing.Size(40, 21);button1 .Size = new Size(50, 21);button2.Size = new Size(50, 21);button3.Size = new Size(50, 21);dataGridView1.AllowUserToAddRows = true;dataGridView1.AllowUserToDeleteRows = true;dataGridView1.AllowUserToResizeColumns = true ;dataGridView1.AllowUserToResizeRows = false;dataGridView1.RowHeadersVisible = false; dataGridView1.SelectionMode=DataGridViewSelectionMode.FullRowSelect;dataGridView1.ReadOnly = false;dataGridView1.ContextMenuStrip = contextMenuStrip1; //绑定contextMenuStrip1button2.ContextMenuStrip = contextMenuStrip1; //绑定contextMenuStrip1contextMenuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {toolStripMenuItem1});toolStripMenuItem1.Text = "删除";toolStripMenuItem1.Size = new Size(40,21);BindInfo(); }#region 显示所有员工信息/// <summary>/// 显示所有员工信息/// </summary>private void BindInfo(){_Linq = new DataClasses1DataContext(strCon); //实例化Linq连接对象//获取所有员工信息var result = from info in _Linq.tb_Employeeselect new{info.ID,info.Name,info.Sex,info.Age,info.Tel,info.Address,info.QQ,info.Email};dataGridView1.DataSource = result; //对DataGridView控件进行数据绑定dataGridView1.Columns[0].Width = 60;dataGridView1.Columns[1].Width = 60;dataGridView1.Columns[2].Width = 30;dataGridView1.Columns[3].Width = 30;dataGridView1.Columns[4].Width = 80;dataGridView1.Columns[5].Width = 150;dataGridView1.Columns[6].Width = 80;dataGridView1.Columns[7].Width = 150;}#endregion/// <summary>/// 鼠标点击cell,获得选中行的编号/// </summary>private void DataGridView1_CellClick(object sender, DataGridViewCellEventArgs e){//获取选中的员工编号,给删除事件使用_strID = Convert.ToString(dataGridView1[0, e.RowIndex].Value).Trim();//以下,给修改事件使用_Linq = new DataClasses1DataContext(strCon); //实例化Linq连接对象//获取选中的员工编号textBox1.Text = Convert.ToString(dataGridView1[0, e.RowIndex].Value).Trim();//根据选中的员工编号获取其详细信息,并重新成成一个表var result = from info in _Linq.tb_Employeewhere info.ID == textBox1.Textselect new{info.ID,info.Name,info.Sex,info.Age,info.Tel,info.Address,info.QQ,info.Email};//相应的文本框及下拉列表中显示选中员工的详细信息foreach (var item in result){textBox2.Text = item.Name;comboBox1.Text = item.Sex;textBox3.Text = item.Age.ToString();textBox4.Text = item.Tel;textBox5.Text = item.Address;textBox6.Text = item.QQ.ToString();textBox7.Text = item.Email;}}/// <summary>/// ToolStripMenuItem1控件的删除事件/// </summary>private void ToolStripMenuItem1_Click(object sender, EventArgs e){if (_strID == ""){MessageBox.Show("请选择要删除的记录");return;}_Linq = new DataClasses1DataContext(strCon);//实例化Linq连接对象//查找要删除的员工信息var result = from employee in _Linq.tb_Employeewhere employee.ID == _strIDselect employee;_Linq.tb_Employee.DeleteAllOnSubmit(result); //删除员工信息_Linq.SubmitChanges(); //实例化Linq连接对象提交操作MessageBox.Show("员工信息删除成功");BindInfo();}/// <summary>/// 按钮事件:向数据库追加新记录/// </summary>private void Button1_Click(object sender, EventArgs e){_Linq = new DataClasses1DataContext(strCon); //实例化Linq连接对象tb_Employee _employee = new tb_Employee{//为tb_Employee类中的员工实体赋值ID = textBox1.Text,Name = textBox2.Text,Sex = comboBox1.Text,Age = Convert.ToInt32(textBox3.Text),Tel = textBox4.Text,Address = textBox5.Text,QQ = Convert.ToInt32(textBox6.Text),Email = textBox7.Text}; //实例化tb_Employee类对象_Linq.tb_Employee.InsertOnSubmit(_employee); //删除员工信息_Linq.SubmitChanges(); //实例化Linq连接对象提交操作MessageBox.Show("员工信息添加成功");BindInfo();}/// <summary>/// 按钮事件:删除选中的记录/// new方法新定义的实例不能用于修改,因为new后的实例用的是新的主键值/// 只可以追加记录,不可以修改记录,对已有记录进行修改应用foreach方法/// </summary>private void Button2_Click(object sender, EventArgs e){_Linq = new DataClasses1DataContext(strCon); //实例化Linq连接对象//tb_Employee _employee = new tb_Employee//{// //为tb_Employee类中的员工实体赋值// ID = textBox1.Text, // Name = textBox2.Text,// Sex = comboBox1.Text,// Age = Convert.ToInt32(textBox3.Text),// Tel = textBox4.Text,// Address = textBox5.Text,// QQ = Convert.ToInt32(textBox6.Text),// Email = textBox7.Text//}; //实例化tb_Employee类对象if (_strID == ""){MessageBox.Show("请选择要删除的记录");return;}_Linq = new DataClasses1DataContext(strCon);//实例化Linq连接对象//查找要删除的员工信息var result = from employee in _Linq.tb_Employeewhere employee.ID == _strIDselect employee;_Linq.tb_Employee.DeleteAllOnSubmit(result); //删除员工信息_Linq.SubmitChanges(); //实例化Linq连接对象提交操作MessageBox.Show("员工信息删除成功");BindInfo();}/// <summary>/// 按钮事件:修改选中的记录/// </summary>private void Button3_Click(object sender, EventArgs e){_Linq = new DataClasses1DataContext(strCon); //实例化Linq连接对象if (textBox1.Text == ""){MessageBox.Show("请选择要修改的记录");return;}//查找要修改的员工信息var result = from _employee in _Linq.tb_Employeewhere _employee.ID == textBox1.Textselect _employee;//对指定的员工信息进行修改foreach (tb_Employee _employee in result){_employee.Name = textBox2.Text;_employee.Sex = comboBox1.Text;_employee.Age = Convert.ToInt32(textBox3.Text);_employee.Tel = textBox4.Text;_employee.Address = textBox5.Text;_employee.QQ = Convert.ToInt32(textBox6.Text);_employee.Email = textBox7.Text;}_Linq.SubmitChanges(); //更新数据库MessageBox.Show("员工信息修改成功");BindInfo(); //把修改后的数据库更新到datagridview1中显示}}
}
五、生成效果
1.VS和SSMS原始记录
2.删除ID=2和5的记录
3.添加记录ID=2、5和8
4.修改ID=3和ID=4的记录
相关文章:

C#中使用LINQtoSQL管理SQL数据库之添加、修改和删除
目录 一、添加数据 二、修改数据 三、删除数据 四、添加、修改和删除的源码 五、生成效果 1.VS和SSMS原始记录 2.删除ID2和5的记录 3.添加记录ID2、5和8 4.修改ID3和ID4的记录 用LINQtoSQL管理SQL Server数据库时,主要有添加、修改和删除3种操作。 项目中创…...

飞致云及其旗下1Panel项目进入2023年第三季度最具成长性开源初创榜单
2023年10月26日,知名风险投资机构Runa Capital发布2023年第三季度ROSS指数(Runa Open Source Startup Index)。ROSS指数按季度汇总并公布在代码托管平台GitHub上年化增长率(AGR)排名前二十位的开源初创公司和开源项目。…...

Maven实战-私服搭建详细教程
Maven实战-私服搭建详细教程 1、为什么需要私服 首先我们为什么需要搭建Maven私服,一切技术来源于解决需求,因为我们在实际开发中,当我们研发出来一个 公共组件,为了能让别的业务开发组用上,则搭建一个远程仓库很有…...

uniapp-自定义表格,右边操作栏固定
uniapp-自定义表格,右边操作栏固定 在网上找了一些,没找到特别合适的,收集了一下其他人的思路,基本都是让左边可以滚动,右边定位,自己也尝试写了一下,有点样式上的小bug,还在尝试修…...

基于Electron27+React18+ArcoDesign客户端后台管理EXE
基于electron27.xreact18搭建电脑端exe后台管理系统模板 electron-react-admin 基于electron27整合vite.jsreact18搭建桌面端后台管理程序解决方案。 前几天有分享electron27react18创建跨平台应用实践,大家感兴趣可以去看看。 https://blog.csdn.net/yanxinyun1990…...

QT5交叉编译保姆级教程(arm64、mips64)
什么是交叉编译? 简单说,就是在当前系统平台上,开发编译运行于其它平台的程序。 比如本文硬件环境是x86平台,但是编译出来的程序是在arm64架构、mips64等架构上运行 本文使用的操作系统:统信UOS家庭版22.0 一、安装…...
python计算图片的RGB值,可以作为颜色的判断条件
python计算图片的RGB值,可以作为颜色的判断条件 import colorsys import PIL.Image as Imagedef get_dominant_color(image):max_score 0.0001dominant_color Nonefor count,(r,g,b) in image.getcolors(image.size[0]*image.size[1]):# 转为HSV标准saturation c…...
oracle 日期
日期加减 Oracle中日期进行加减可以使用多种方式,以下介绍三种 一种是针对天的操作,适用于对日,时,分,秒的操作, 一种是对月的操作,适用于月,年的操作, 一种是使用INTER…...

JVM堆内存解析
一、JVM堆内存介绍 Java大多数对象都是存放在堆中,堆内存是完全自动化管理,根据垃圾回收机制不同,Java堆有不同的结构,下面是我们一台生产环境服务器JVM堆内存空间分配情况,JVM只设置了-Xms2048M -Xmx2048M。 1、JVM堆…...

C#Onnx模型信息查看工具
效果 Netron效果 项目 代码 using Microsoft.ML.OnnxRuntime; using System; using System.Collections.Generic; using System.Text; using System.Windows.Forms;namespace Onnx_Demo {public partial class frmMain : Form{public frmMain(){InitializeComponent();}string…...
RK3588 ubuntu系统安装opencv
废话不多说直接上步骤: 先切换至root用户 sudo su 输入密码先更新一下本地软件 apt update apt upgrade 安装相关环境 apt install build-essential cmake git pkg-config libgtk-3-dev \ libavcodec-dev libavformat-dev libswscale-dev libv4l-dev libxvidcore-…...
常用的vue UI组件库
背景:Vue.js 是一个渐进式 javascript 框架,用于构建 UIS(用户界面)和 SPA(单页应用程序)。UI 组件库的出现提高了我们的开发效率,增强了应用的整体外观、感觉、交互性和可访问性,下…...

防范欺诈GPT
去年,ChatGPT的发布让全世界都感到惊讶和震惊。 突然间出现了一个平台,它比之前的任何其他技术都更深入地了解互联网。人工智能可以被训练成像阿姆一样说唱,以世界著名诗人的风格写作,并精确地翻译内容,以至于它似乎能…...

【Java】多线程案例(单例模式,阻塞队列,定时器,线程池)
❤️ Author: 老九 ☕️ 个人博客:老九的CSDN博客 🙏 个人名言:不可控之事 乐观面对 😍 系列专栏: 文章目录 实现安全版本的单例模式饿汉模式类和对象的概念类对象类的静态成员与实例成员 懒汉模式如何保证…...

STM32:使用蓝牙模块
一、蓝牙概要 蓝牙是一种常见的无线通信协议,通常用于短距离通信。蓝牙分为经典蓝牙和低功耗蓝牙(BLE)。经典蓝牙通常用于需要持续传输数据的设备,比如蓝牙耳机等。低功耗蓝牙通常用于只需要间歇性传输数据的设备,比如运动手环。 蓝牙…...

Blazor 虚拟滚动/瀑布流加载Table数据
page "/virtualScrolling" using BlazorApp.Data<h3>Table 虚拟滚动行</h3> <h4>Table 组件显示大数据时通常采用分页加载数据,还有一种虚拟行的技术类似手机滚动到底部时后台自动加载数据</h4><p>快速滚动时显示行占位&am…...

数字化浪潮下,AI数字人融入多元化应用场景
随着AI数字人技术的发展,各个行业都在不断挖掘数字人更多的潜力,VR全景中的AI数字人功能逐渐成为了一种新颖的用户交互方式。AI数字人将企业的文化、品牌价值、商业服务等充分结合为一体,为企业提供了全新的机会,从客户互动到营销…...

JVM虚拟机:JVM的垃圾回收清除算法(GC)有哪些
垃圾回收清除算法 引用计数法 标记清除 拷贝算法 标记压缩 引用计数法 有一个引用指向对象,那么引用计数就加1,少一个引用指向,那么引用计数就减1,这种方法了解一下就好,JVM机会不会使用这种方法,因为它在每次对象赋值的时候都要维护引用计数器,且计数器本身也有一定的…...

我应该删除低质量页面以提高Google排名吗?
为什么考虑删除低质量页面? 上个月,根据Google的搜索团队John Mueller和Gary Illyes在 “Search Off the Record”播客中的讨论,质量是影响搜索的几乎每一个方面的关键因素。 虽然高质量的内容不能保证高排名,但它可以影响Googl…...

【实战Flask API项目指南】之六 数据库集成 SQLAlchemy
实战Flask API项目指南之 数据库集成 本系列文章将带你深入探索实战Flask API项目指南,通过跟随小菜的学习之旅,你将逐步掌握 Flask 在实际项目中的应用。让我们一起踏上这个精彩的学习之旅吧! 前言 在上一篇文章中,我们实现了…...

国防科技大学计算机基础课程笔记02信息编码
1.机内码和国标码 国标码就是我们非常熟悉的这个GB2312,但是因为都是16进制,因此这个了16进制的数据既可以翻译成为这个机器码,也可以翻译成为这个国标码,所以这个时候很容易会出现这个歧义的情况; 因此,我们的这个国…...

深入浅出Asp.Net Core MVC应用开发系列-AspNetCore中的日志记录
ASP.NET Core 是一个跨平台的开源框架,用于在 Windows、macOS 或 Linux 上生成基于云的新式 Web 应用。 ASP.NET Core 中的日志记录 .NET 通过 ILogger API 支持高性能结构化日志记录,以帮助监视应用程序行为和诊断问题。 可以通过配置不同的记录提供程…...

工业安全零事故的智能守护者:一体化AI智能安防平台
前言: 通过AI视觉技术,为船厂提供全面的安全监控解决方案,涵盖交通违规检测、起重机轨道安全、非法入侵检测、盗窃防范、安全规范执行监控等多个方面,能够实现对应负责人反馈机制,并最终实现数据的统计报表。提升船厂…...
从零实现富文本编辑器#5-编辑器选区模型的状态结构表达
先前我们总结了浏览器选区模型的交互策略,并且实现了基本的选区操作,还调研了自绘选区的实现。那么相对的,我们还需要设计编辑器的选区表达,也可以称为模型选区。编辑器中应用变更时的操作范围,就是以模型选区为基准来…...

安宝特方案丨XRSOP人员作业标准化管理平台:AR智慧点检验收套件
在选煤厂、化工厂、钢铁厂等过程生产型企业,其生产设备的运行效率和非计划停机对工业制造效益有较大影响。 随着企业自动化和智能化建设的推进,需提前预防假检、错检、漏检,推动智慧生产运维系统数据的流动和现场赋能应用。同时,…...

Linux相关概念和易错知识点(42)(TCP的连接管理、可靠性、面临复杂网络的处理)
目录 1.TCP的连接管理机制(1)三次握手①握手过程②对握手过程的理解 (2)四次挥手(3)握手和挥手的触发(4)状态切换①挥手过程中状态的切换②握手过程中状态的切换 2.TCP的可靠性&…...
Golang dig框架与GraphQL的完美结合
将 Go 的 Dig 依赖注入框架与 GraphQL 结合使用,可以显著提升应用程序的可维护性、可测试性以及灵活性。 Dig 是一个强大的依赖注入容器,能够帮助开发者更好地管理复杂的依赖关系,而 GraphQL 则是一种用于 API 的查询语言,能够提…...
oracle与MySQL数据库之间数据同步的技术要点
Oracle与MySQL数据库之间的数据同步是一个涉及多个技术要点的复杂任务。由于Oracle和MySQL的架构差异,它们的数据同步要求既要保持数据的准确性和一致性,又要处理好性能问题。以下是一些主要的技术要点: 数据结构差异 数据类型差异ÿ…...
Java多线程实现之Callable接口深度解析
Java多线程实现之Callable接口深度解析 一、Callable接口概述1.1 接口定义1.2 与Runnable接口的对比1.3 Future接口与FutureTask类 二、Callable接口的基本使用方法2.1 传统方式实现Callable接口2.2 使用Lambda表达式简化Callable实现2.3 使用FutureTask类执行Callable任务 三、…...
【算法训练营Day07】字符串part1
文章目录 反转字符串反转字符串II替换数字 反转字符串 题目链接:344. 反转字符串 双指针法,两个指针的元素直接调转即可 class Solution {public void reverseString(char[] s) {int head 0;int end s.length - 1;while(head < end) {char temp …...