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的记录 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/178609.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

app开发之后需要做什么

在完成app的开发之后&#xff0c;还有一系列的工作需要进行&#xff0c;以确保app的顺利上线和用户的良好体验。下面将从原理和详细介绍两个方面来介绍app开发之后需要做的工作。 一、原理介绍 1. 测试与调试&#xff1a;在app开发完成后&#xff0c;需要进行全面的测试与调试…

[论文笔记]RetroMAE

引言 RetroMAE,中文题目为 通过掩码自编码器预训练面向检索的语言模型。 尽管现在已经在许多重要的自然语言处理任务上进行了预训练,但对于密集检索来说,仍然需要探索有效的预训练策略。 本篇工作,作者提出RetroMAE,一个新的基于掩码自编码器(Masked Auto-Encoder,MAE)…

十种排序算法(1) - 准备测试函数和工具

1.准备工作 我们先写一堆工具&#xff0c;后续要用&#xff0c;不然这些写在代码里可读性巨差 #pragma once #include<stdio.h>//为C语言定义bool类型 typedef int bool; #define false 0 #define true 1//用于交互a和b inline void swap(int* a, int* b) {/*int c *a…

AutoDL 云/本地部署 百川2、GLM2

AutoDL 云上部署 百川2、GLM2 AutoDL 云上部署 百川2、GLM2配置环境体验常见问题huggingface访问不了&#xff0c;使用学术资源加速大文件上传&#xff0c;百度、阿里网盘都可CUDA 空间不足系统盘空间不足省钱绝招软件源 本地部署 百川2、GLM2根据显存大小选模型拉取docker镜像…

MySQL-----事务

事务的概念 事务是一种机制&#xff0c;一个操作序列。包含了一组数据库的操作命令&#xff0c;所有的命令都是一个整体&#xff0c;向系统提交或者撤销的操作&#xff0c;要么都执行&#xff0c;要么都不执行。 是一个不可分割的单位 事务的ACID特点 ACID&#xff0c;是指在可…

【Algorithm】最容易理解的蒙特卡洛树搜索(Monte Carlo Tree Search,MCTS)算法

看了不少解读和笔记&#xff0c;本文把最容易理解的解读做个总结。 1. 蒙特卡洛方法 蒙特卡洛方法(Monte Carlo method)&#xff0c;是一种“统计模拟方法”。20世纪40年代&#xff0c;为建造核武器&#xff0c;冯.诺伊曼 等人发明了该算法。因赌城蒙特卡洛而得名&#xff0c…

R语言用jsonlite库写的一个图片爬虫

以下是一个使用R语言和jsonlite库下载图片的程序。首先&#xff0c;我们需要导入jsonlite库和options()函数&#xff0c;然后将代理服务器的主机名和端口号设置为"duoip"和"8000"。接着&#xff0c;我们将URL设置为"https://yun.baidu.com/"&…

LeetCode 143. 重排链表(双指针、快慢指针)

题目&#xff1a; 链接&#xff1a;LeetCode 143. 重排链表 难度&#xff1a;中等 给定一个单链表 L 的头节点 head &#xff0c;单链表 L 表示为&#xff1a; L0 → L1 → … → Ln-1 → Ln 请将其重新排列后变为&#xff1a; L0 → Ln → L1 → Ln-1 → L2 → Ln-2 → … 不…

Redis入门指南学习笔记(2):常用数据类型解析

一.前言 本文主要介绍Redis中包含几种主要数据类型&#xff1a;字符串类型、哈希类型、列表类型、集合类型和有序集合类型。 二.字符串类型 字符串类型是Redis中最基本的数据类型&#xff0c;它是其他4种数据类型的基础&#xff0c;其他数据类型与字符串类型的差别从某种角度…

欧科云链研究院:如何降低Web3风险,提升虚拟资产创新的安全合规

在香港Web3.0行业&#xff0c;技术推动了虚拟资产投资市场的快速增长&#xff0c;但另一方面&#xff0c;JPEX诈骗案等行业风险事件也接连发生&#xff0c;为Web3行业发展提供了重要警示。在近期的香港立法会施政报告答问会上&#xff0c;行政长官李家超表示&#xff0c;与诈骗…

自己动手实现一个深度学习算法——三、神经网络的学习

文章目录 1.从数据中学习1&#xff09;数据驱动2&#xff09;训练数据和测试数据 2.损失函数1)均方误差2)交叉熵误差3)mini-batch学习 3.数值微分1&#xff09;概念2&#xff09;数值微分实现 4.梯度1&#xff09;实现2&#xff09;梯度法3&#xff09;梯度法实现4&#xff09;…

从零开始的目标检测和关键点检测(二):训练一个Glue的RTMDet模型

从零开始的目标检测和关键点检测&#xff08;二&#xff09;&#xff1a;训练一个Glue的RTMDet模型 一、config文件解读二、开始训练三、数据集分析四、ncnn部署 从零开始的目标检测和关键点检测&#xff08;一&#xff09;&#xff1a;用labelme标注数据集 从零开始的目标检测…

[H5动画制作系列]坐标转化问题一次搞清,一了百了

前言: 本次演示的坐标包括三个坐标层&#xff1a; 1.舞台上的某位置相对于舞台的全局坐标的坐标(黑色)。 2.舞台上蓝色实例内部某位置相对于该蓝色实例内部局部坐标的坐标(蓝色)。 3.舞台上蓝色实例内部的红色实例内部某位置相对该红色实例内部局部坐标的坐标(红色)。 舞台…

Day18力扣打卡

打卡记录 寻找重复数&#xff08;双指针&#xff09; 链接 Floyd判圈法&#xff0c;先用快慢指针以不同速率进行移动&#xff0c;最终一定会出现相遇点&#xff0c;然后在使一指针从初始开始&#xff0c;两指针再以同步调移动&#xff0c;再次相遇的点一定为循环开始的点位。 …

赋能制造业高质量发展,释放采购数字化新活力——企企通亮相武汉2023国际智能制造创新论坛

摘要 “为应对成本上升、供应端不稳定、供应链上下游协同困难、决策无数据依据等问题&#xff0c;利用数字化手段降本增效、降低潜在风险十分关键。在AI等先进技术发展、供应链协同效应和降本诉求等机遇的驱动下&#xff0c;采购供应链数字化、协同化成为企业激烈竞争的优先选…

链表的介绍

链表的结构和定义 介绍 概念&#xff1a;链表是一种物理存储结构上非连续、非顺序的存储结构&#xff0c;数据元素的逻辑顺序是通过链表中的指针链接次序实现的 。 链表&#xff08;linked list&#xff09;是一种经典的线性数据结构&#xff0c;它可以用来存储一组具有顺序性…

执行npm install时老是安装不成功node-sass的原因和解决方案

相信你安装前端项目所需要的依赖包&#xff08;npm install 或 yarn install&#xff09;时&#xff0c;有可能会出现如下报错&#xff1a; D:\code\**project > yarn install ... [4/4] Building fresh packages... [-/6] ⠁ waiting... [-/6] ⠂ waiting... [-/6] ⠂ wai…

oracle (9)Storage Relationship Strut

目录 一、基础知识 1、数据库逻辑结构图 2、Types of Segments 段的类型 3、Storage Clause Precedence 存储条款的优先顺序 4、Extent Alloc & Dealloc 区的范围分配和取消分配 5、 Used and Free Extents 使用和自由区 6、Database Block 数据库块 7、Multiple B…

玻色量子签约移动云“五岳”量子云计算创新加速计划!

2023年4月24-26日&#xff0c;由中国移动通信集团主办的“云擎未来 智信天下”2023移动云大会在苏州圆满落幕。 中国移动在本次大会发布了“五岳”量子云计算创新加速计划。作为中国移动量子计算方向的战略伙伴&#xff0c;玻色量子创始人&CEO文凯博士代表北京玻色量子科技…

vue3+vite实现一个后台管理框架,毒蘑菇后台管理。

写后台管理的项目写了很多个了&#xff0c;虽说用的别人的模板&#xff0c;自己专注于自己的业务&#xff0c;保证自己的业务不出错就行了&#xff0c;但是自定义配置又不好去配置&#xff0c;大家用的模板都差不多&#xff0c;用模板自带的业务功能呢后台又得是模板自带的&…