C#中使用LINQtoSQL管理SQL数据库之添加、修改和删除

news2024/10/7 16:20:15

目录

一、添加数据

二、修改数据

三、删除数据 

四、添加、修改和删除的源码

五、生成效果

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;     //绑定contextMenuStrip1
            button2.ContextMenuStrip = contextMenuStrip1;               //绑定contextMenuStrip1

            contextMenuStrip1.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_Employee
                         select 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_Employee
                         where info.ID == textBox1.Text
                         select 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_Employee
                         where employee.ID == _strID
                         select 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_Employee
                         where employee.ID == _strID
                         select 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_Employee
                         where _employee.ID == textBox1.Text
                         select _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.coloradmin.cn/o/1164225.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Unity AssetBundle批量打包、加载(场景、Prefab)完整流程

目录 1、文章介绍 2、具体思路和写法 &#xff08;1&#xff09;AB包的打包 &#xff08;2&#xff09;AB包的加载 &#xff08;3&#xff09;AB包卸载 3、结语 1、文章介绍 本篇博客主要起记录和学习作用&#xff0c;简单的介绍一下AB包批量的打包和加载AB包的方式&…

项目实战:编辑页面加载库存信息

1、前端编辑页面加载水果库存信息逻辑edit.js let queryString window.location.search.substring(1) if(queryString){var fid queryString.split("")[1]window.onloadfunction(){loadFruit(fid)}loadFruit function(fid){axios({method:get,url:edit,params:{fi…

【IIS搭建网站】在本地电脑上搭建web服务器并实现外网访问

文章目录 1.前言2.Windows网页设置2.1 Windows IIS功能设置2.2 IIS网页访问测试 3. Cpolar内网穿透3.1 下载安装Cpolar内网穿透3.2 Cpolar云端设置3.3 Cpolar本地设置 4.公网访问测试5.结语 1.前言 在网上各种教程和介绍中&#xff0c;搭建网页都会借助各种软件的帮助&#xf…

【APP】go-musicfox - 一款网易云音乐命令行客户端, 文件很小Mac版本只有16.5M

go-musicfox 是用 Go 写的又一款网易云音乐命令行客户端&#xff0c;支持各种音质级别、UnblockNeteaseMusic、Last.fm、MPRIS 和 macOS 交互响应&#xff08;睡眠暂停、蓝牙耳机连接断开响应和菜单栏控制等&#xff09;等功能特性。 预览 启动 启动界面 主界面 主界面 通…

【docker】安装 showdoc

1. 下载镜像 2.新建存放showdoc数据的目录 3.启动showdoc容器 4.打开网页 1. 下载镜像 # 原版官方镜像安装命令(中国大陆用户不建议直接使用原版镜像&#xff0c;可以用后面的加速镜像) docker pull star7th/showdoc # 中国大陆镜像安装命令&#xff08;安装后记得执行docke…

数组反转(LeetCode)

凑数 ... 描述 : 给你一个 32 位的有符号整数 x &#xff0c;返回将 x 中的数字部分反转后的结果。 如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] &#xff0c;就返回 0。 假设环境不允许存储 64 位整数&#xff08;有符号或无符号&#xff09;。 题目…

Dubbo中的负载均衡算法之一致性哈希算法

Dubbo中的负载均衡算法之一致性哈希算法 哈希算法 假设这样一个场景&#xff0c;我们申请一台服务器来缓存100万的数据&#xff0c;这个时候是单机环境&#xff0c;所有的请求都命中到这台服务器。后来业务量上涨&#xff0c;我们的数据也从100万上升到了300万&#xff0c;原…

VS使用小技巧——如何让别人看不到你写的代码,却能够运行你的代码

VS使用小技巧 前言方法使用静态库的示例如何创建静态库如何导入静态库Xcode里导入静态库VS2022导入静态库 前言 在实际生活中&#xff0c;作为程序员偶尔会因为资金不够用了选择去兼职写代码&#xff0c;当我们写完一个代码&#xff0c;将他发给某个公司的时候&#xff0c;我们…

C++——定义一个 Box(盒子)类,在该类定义中包括数据成员和成员函数

完整代码&#xff1a; /*定义一个 Box(盒子)类&#xff0c;在该类定义中包括数据成员和成员函数。 数据成员&#xff1a;length &#xff08;长&#xff09;、width&#xff08;宽&#xff09;和 height&#xff08;高&#xff09;&#xff1b; 成员函数&#xff1a;构造函数 …

阿里云双十一大促:云服务器1年99元,新老同享,续费同价!

2023年双十一购物狂欢节来临&#xff0c;阿里云推出了金秋云创季活动&#xff0c;活动力度很大&#xff0c;不再是老用户与狗不得入内&#xff0c;2核2G3M云服务器1年99元&#xff0c;新老同享&#xff0c;续费同价&#xff01; 活动地址&#xff1a;传送门>>> 活动详…

【C++】C++11【下】lambda表达式|thread线程库

目录 1、lambda表达式 1.1 lambda表达式的引入 1.2 lambda表达式的语法 1.3 lambda表达式的原理 2、线程库 2.1thread类的介绍 2.2 线程函数参数 2.3 原子性操作库(atomic) 2.4 使用场景 应用场景1&#xff1a; 应用场景2: 应用场景3&#xff1a; 应用场景4&#xf…

SAFe大规模敏捷框架

Leangoo领歌是一款永久免费的专业的敏捷开发管理工具&#xff0c;提供端到端敏捷研发管理解决方案&#xff0c;涵盖敏捷需求管理、任务协同、进展跟踪、统计度量等。 
 Leangoo领歌上手快、实施成本低&#xff0c;可帮助企业快速落地敏捷&#xff0c;提质增效、缩短周期、加速…

与AI对话的艺术:如何优化Prompt以获得更好的响应反馈

前言 在当今数字化时代&#xff0c;人工智能系统已经成为我们生活的一部分。我们可以在智能助手、聊天机器人、搜索引擎等各种场合与AI进行对话。然而&#xff0c;要获得有益的回应&#xff0c;我们需要学会与AI进行有效的沟通&#xff0c;这就涉及到如何编写好的Prompt。 与…

【Linux学习笔记】进程概念(下)

进程地址空间1. 虚拟地址2. 什么是进程地址空间3. 进程地址空间的映射。4. 地址空间存在的意义5. 写时拷贝 进程地址空间 1. 虚拟地址 来看这样一段代码。 #include <stdio.h> #include <unistd.h>int global_value 100;int main() {pid_t id fork();if(id &l…

3206. 拼图

给出一个 nm 的方格图&#xff0c;现在要用如下 L 型的积木拼到这个图中&#xff0c;使得方格图正好被拼满&#xff0c;请问总共有多少种拼法。 其中&#xff0c;方格图的每一个方格正好能放积木中的一块。 积木可以任意旋转。 输入格式 输入的第一行包含两个整数 n,m&#xff…

scrapy+selenium框架模拟登录

目录 一、cookie和session实现登录原理 二、模拟登录方法-Requests模块Cookie实现登录 三、cookiesession实现登录并获取数据 四、selenium使用基本代码 五、scrapyselenium实现登录 一、cookie和session实现登录原理 cookie:1.网站持久保存在浏览器中的数据2.可以是长期…

3D视觉引导工业机器人上下料,助力汽车制造业实现智能化生产

在工业制造领域&#xff0c;机器人技术一直是推动生产效率和质量提升的重要力量。近年来&#xff0c;随着3D视觉技术的快速发展&#xff0c;工业机器人在处理复杂任务方面迈出了重要的一步。特别是在汽车制造行业&#xff0c;3D视觉引导工业机器人的应用已经取得了令人瞩目的成…

dockefile

文章目录 应用的部署MySql的部署Tomcat的部署 dockerfileDocker原理镜像的制作容器转镜像Dockerfile 服务编排Docker Compose Docker 私有仓库 应用的部署 搜索app的镜像拉去app的镜像创建容器操作容器中的app MySql的部署 容器内的网络服务和外部机器无法直接通信外部机器和…

软件测试 —— 移动端测试

1. 移动端 指移动设备&#xff08;如智能手机、平板电脑、智能手表等&#xff09;上的操作系统和应用程序。移动设备具有便携性和多功能性&#xff0c;可以随时随地连接互联网&#xff0c;提供丰富的应用和服务。 2. 移动端应用分类 (1) 原生应用&#xff08;Native App&…

访问单通道Mat中的值之at()、ptr()、iscontinuous()【C++的OpenCV 第十四课-OpenCV基础强化(二)】

&#x1f389;&#x1f389;&#x1f389; 欢迎各位来到小白 p i a o 的学习空间&#xff01; \color{red}{欢迎各位来到小白piao的学习空间&#xff01;} 欢迎各位来到小白piao的学习空间&#xff01;&#x1f389;&#x1f389;&#x1f389; 目录 一、访问的方法 \color{blu…