C#连接数据库SQlServer+Form窗格实现简单动态增删查改操作

2023-10-31

C# 连接数据库SQlServer+Form窗格实现简单动态增删查改操作

一、数据库连接

数据库连接部分学习自该博主原创博客,点击即可跳转
再附上该博主的博客链接:https://blog.csdn.net/kiss__soul/article/details/80316788
该部分通过上方博主的方法实现的,讲得非常的详细,所以在这里就不再进行说明了。
只是将其中的类名修改成了SQLServerText。

二、增删查改操作

在数据库连接成功后,在Form窗格中进行设计;
在这里插入图片描述

2.1数据库表名和字段

在这里插入图片描述

2.1全局变量

 		SQLServerTest server = new SQLServerTest();
		DataTable data = new DataTable();
	 	static int rowindex;
        static string value0 = "";//数据库中只有三个字段,所以定义三个变量,需要的可以自增
        static string value1 = "";
        static string value2 = "";

2.3获取DataGridview中的行数据

private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            rowindex = e.RowIndex;
            try
            {
                 //获得当前行的第0列的值
                value0 = dataGridView1.Rows[rowindex].Cells[0].Value.ToString();
                //获得当前行的第一列的值
                value1 = dataGridView1.Rows[rowindex].Cells[1].Value.ToString();
                //获得当前行的第二列的值
                value2 = dataGridView1.Rows[rowindex].Cells[2].Value.ToString().Trim();
                MessageBox.Show("value0:"+value0+"value1:"+value1+"value2:"+value2);//如果在测试修改数据时这条语句最好屏蔽,因为它会很烦人
            }
            catch (Exception exc) { }
        }

2.4数据查询(第一种方法)

 private void button1_Click(object sender, EventArgs e)
        {
            //清除按钮绑定,在一次运行多次点击查询按钮时会导致列不断往后添加修改和删除按钮
            dataGridView1.Columns.Clear();

            string sql = "select * from User1 order by id asc";//以升序排列
            data=server.ExecuteQuery(sql);
            dataGridView1.DataSource = data;
            DataGridViewButtonColumn btn = new DataGridViewButtonColumn();
            btn.Name = "btninsert";
            btn.HeaderText = "btninsert";
            btn.DefaultCellStyle.NullValue = "确认修改";
            dataGridView1.Columns.Add(btn);//添加修改按钮

            DataGridViewButtonColumn btn2 = new DataGridViewButtonColumn();
            btn2.Name = "btndelete";
            btn.HeaderText = "btndelete";
            btn2.DefaultCellStyle.NullValue = "删除";
            dataGridView1.Columns.Add(btn2);//添加删除按钮
        }

2.5数据查询(第二种方法)

private DataTable getselectMessage()
        {
            DataTable dataTable = new DataTable();
            string P_Str_ConnectionStr = string.Format(
            @"Data Source=(local);Initial Catalog=Test1;Integrated Security=True");
            //点击服务器资源管理器,右键数据库选择属性,在属性中可以看见“连接字符串”一栏,将该行的数据复制粘贴到此即可
           string P_Str_SqlStr = string.Format("select * from User1 order by id asc");
            SqlDataAdapter P_SqlDataAdapter = new SqlDataAdapter(
            P_Str_SqlStr,P_Str_ConnectionStr);
            P_SqlDataAdapter.Fill(dataTable );
            return dataTable ;
        }
        private void button2_Click(object sender, EventArgs e)
        {
            dataGridView1.DataSource = getselectMessage();
        }

2.6修改、插入、删除数据

private void dataGridView1_CellContentClick_1(object sender, DataGridViewCellEventArgs e)
        {
            DataGridViewButtonColumn btnCol = dataGridView1.Columns[e.ColumnIndex] as DataGridViewButtonColumn;
            if (btnCol != null)
            {
                MessageBox.Show("当前点击的列是:" + btnCol.HeaderText);
                string statusbtn = btnCol.HeaderText;//获取当前点击的按钮Text
                if (statusbtn == "btndelete")
                {
                    //删除
                    this.dataGridView1.Rows.RemoveAt(e.RowIndex);//删除当前行
                    MessageBox.Show("0:" + value0 + ",1:" + value1 + ",2:" + value2);//查看在点击按钮时能不能获取到该行的所有数据;如果不想写多余代码也可以用debug查看。
                    string sqldel = "delete  from User1 where id = " +value0+"and name ='"+value1+"' and "+"age = '"+value2+"'";//删除选中行数据
                    int deli = server.ExecuteUpdate(sqldel);
                    if (deli > 0)
                    {
                        MessageBox.Show("动态删除成功!");
                    }else
                    {
                        MessageBox.Show("动态删除失败!");
                    }
                }
                else if (statusbtn == "btninsert")
                {
                    //修改和插入
                    if (dataGridView1.Columns[e.ColumnIndex] is DataGridViewButtonColumn && e.RowIndex > -1)
                    {
                        string sql2 = "select * from User1 where id = " + value0;
                        MessageBox.Show(sql2);
                        DataTable dse = server.ExecuteQuery(sql2);
                        //如果在数据库表中没有找到id为value0的数据那么就默认它是新增的,进入插入数数代码块
                        if (dse.Rows.Count <= 1)
                        {
                            //插入数据
                            string insertsql = "insert into User1(id,name,age) values(" + value0 + ",'" + value1 + "','" + value2 + "'" + ")";
                            MessageBox.Show(insertsql);
                            int inserti = server.ExecuteUpdate(insertsql);
                            if (inserti > 0)
                            {
                                MessageBox.Show("动态插入成功!");
                            }
                            else
                            {
                                MessageBox.Show("动态插入失败!");
                            }
                        }
                        else//如果查询时获取到了该id为value0的数据,那么就进行修改
                        {
                            string sql = "update User1 set  name ='" + value1 + "',age='" + value2 + "' where id = " + value0;
                        	MessageBox.Show(sql);
                            int i = server.ExecuteUpdate(sql);
                            if (i > 0)
                            {
                                MessageBox.Show("动态修改成功!");
                            }
                            else
                            {
                                MessageBox.Show("动态修改失败!");
                            }
                        }
                    }
                }
            }

        }

修改前
修改后
插入前
插入后
删除前
删除后

2.7附上Form.cs的设计代码

窗格的标题不同是因为写到后面修改了一下。

namespace 增删查改操作
{
    partial class Form1
    {
        /// <summary>
        /// 必需的设计器变量。
        /// </summary>
        private System.ComponentModel.IContainer components = null;

        /// <summary>
        /// 清理所有正在使用的资源。
        /// </summary>
        /// <param name="disposing">如果应释放托管资源,为 true;否则为 false。</param>
        protected override void Dispose(bool disposing)
        {
            if (disposing && (components != null))
            {
                components.Dispose();
            }
            base.Dispose(disposing);
        }

        #region Windows 窗体设计器生成的代码

        /// <summary>
        /// 设计器支持所需的方法 - 不要修改
        /// 使用代码编辑器修改此方法的内容。
        /// </summary>
        private void InitializeComponent()
        {
            this.dataGridView1 = new System.Windows.Forms.DataGridView();
            this.button1 = new System.Windows.Forms.Button();
            this.button2 = new System.Windows.Forms.Button();
            this.button3 = new System.Windows.Forms.Button();
            this.button4 = new System.Windows.Forms.Button();
            ((System.ComponentModel.ISupportInitialize)(this.dataGridView1)).BeginInit();
            this.SuspendLayout();
            // 
            // dataGridView1
            // 
            this.dataGridView1.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
            this.dataGridView1.Location = new System.Drawing.Point(20, 12);
            this.dataGridView1.Name = "dataGridView1";
            this.dataGridView1.RowTemplate.Height = 23;
            this.dataGridView1.Size = new System.Drawing.Size(577, 330);
            this.dataGridView1.TabIndex = 0;
            this.dataGridView1.CellClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.dataGridView1_CellClick);
            this.dataGridView1.CellContentClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.dataGridView1_CellContentClick_1);
            // 
            // button1
            // 
            this.button1.Location = new System.Drawing.Point(74, 348);
            this.button1.Name = "button1";
            this.button1.Size = new System.Drawing.Size(115, 30);
            this.button1.TabIndex = 1;
            this.button1.Text = "查询所有数据";
            this.button1.UseVisualStyleBackColor = true;
            this.button1.Click += new System.EventHandler(this.button1_Click);
            // 
            // button2
            // 
            this.button2.Location = new System.Drawing.Point(191, 349);
            this.button2.Name = "button2";
            this.button2.Size = new System.Drawing.Size(133, 29);
            this.button2.TabIndex = 2;
            this.button2.Text = "查询所有数据2";
            this.button2.UseVisualStyleBackColor = true;
            this.button2.Click += new System.EventHandler(this.button2_Click);
            // 
            // button3
            // 
            this.button3.Location = new System.Drawing.Point(330, 349);
            this.button3.Name = "button3";
            this.button3.Size = new System.Drawing.Size(130, 29);
            this.button3.TabIndex = 3;
            this.button3.Text = "修改id2数据";
            this.button3.UseVisualStyleBackColor = true;
            this.button3.Click += new System.EventHandler(this.button3_Click);
            // 
            // button4
            // 
            this.button4.Location = new System.Drawing.Point(466, 351);
            this.button4.Name = "button4";
            this.button4.Size = new System.Drawing.Size(71, 27);
            this.button4.TabIndex = 4;
            this.button4.Text = "添加一行";
            this.button4.UseVisualStyleBackColor = true;
            this.button4.Click += new System.EventHandler(this.button4_Click);
            // 
            // Form1
            // 
            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
            this.ClientSize = new System.Drawing.Size(617, 394);
            this.Controls.Add(this.button4);
            this.Controls.Add(this.button3);
            this.Controls.Add(this.button2);
            this.Controls.Add(this.button1);
            this.Controls.Add(this.dataGridView1);
            this.Name = "Form1";
            this.Text = "增删查改操作";
            ((System.ComponentModel.ISupportInitialize)(this.dataGridView1)).EndInit();
            this.ResumeLayout(false);

        }

        #endregion

        private System.Windows.Forms.DataGridView dataGridView1;
        private System.Windows.Forms.Button button1;
        private System.Windows.Forms.Button button2;
        private System.Windows.Forms.Button button3;
        private System.Windows.Forms.Button button4;
    }
}


三、结尾

好啦,以上就是完整的一套简单增删查改代码啦,第一次写博客,还请大家多多包涵多多指教~~~

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C#连接数据库SQlServer+Form窗格实现简单动态增删查改操作 的相关文章

  • 为什么当实例化新的游戏对象时,它没有向它们添加标签? [复制]

    这个问题在这里已经有答案了 using System Collections using System Collections Generic using UnityEngine public class Test MonoBehaviou
  • 如何使用 ICU 解析汉字数字字符?

    我正在编写一个使用 ICU 来解析由汉字数字字符组成的 Unicode 字符串的函数 并希望返回该字符串的整数值 五 gt 5 三十一 gt 31 五千九百七十二 gt 5972 我将区域设置设置为 Locale getJapan 并使用
  • 在 Windows 窗体中保存带有 Alpha 通道的单色位图会保存不同(错误)的颜色

    在 C NET 2 0 Windows 窗体 Visual Studio Express 2010 中 我保存由相同颜色组成的图像 Bitmap bitmap new Bitmap width height PixelFormat Form
  • OleDbDataAdapter 未填充所有行

    嘿 我正在使用 DataAdapter 读取 Excel 文件并用该数据填充数据表 这是我的查询和连接字符串 private string Query SELECT FROM Sheet1 private string ConnectStr
  • Clang 3.1 + libc++ 编译错误

    我已经构建并安装了 在前缀下 alt LLVM Clang trunk 2012 年 4 月 23 日 在 Ubuntu 12 04 上成功使用 GCC 4 6 然后使用此 Clang 构建的 libc 当我想使用它时我必须同时提供 lc
  • 在 ASP.NET 5 中使用 DI 调用构造函数时解决依赖关系

    Web 上似乎充斥着如何在 ASP NET 5 中使用 DI 的示例 但没有一个示例显示如何调用构造函数并解决依赖关系 以下只是众多案例之一 http social technet microsoft com wiki contents a
  • C# 中通过 Process.Kill() 终止的进程的退出代码

    如果在我的 C 应用程序中 我正在创建一个可以正常终止或开始行为异常的子进程 在这种情况下 我通过调用 Process Kill 来终止它 但是 我想知道该进程是否已退出通常情况下 我知道我可以获得终止进程的错误代码 但是正常的退出代码是什
  • C#中如何移动PictureBox?

    我已经使用此代码来移动图片框pictureBox MouseMove event pictureBox Location new System Drawing Point e Location 但是当我尝试执行时 图片框闪烁并且无法识别确切
  • 带动态元素的 WPF 启动屏幕。如何?

    我是 WPF 新手 我需要一些帮助 我有一个加载缓慢的 WPF 应用程序 因此我显示启动屏幕作为权宜之计 但是 我希望能够在每次运行时更改屏幕 并在文本区域中显示不同的引言 这是一个生产力应用程序 所以我将使用非愚蠢但激励性的引言 当然 如
  • WCF 中 SOAP 消息的数字签名

    我在 4 0 中有一个 WCF 服务 我需要向 SOAP 响应添加数字签名 我不太确定实际上应该如何完成 我相信响应应该类似于下面的链接中显示的内容 https spaces internet2 edu display ISWG Signe
  • SolrNet连接说明

    为什么 SolrNet 连接的容器保持静态 这是一个非常大的错误 因为当我们在应用程序中向应用程序发送异步请求时 SolrNet 会表现异常 在 SolrNet 中如何避免这个问题 class P static void M string
  • 如何序列化/反序列化自定义数据集

    我有一个 winforms 应用程序 它使用强类型的自定义数据集来保存数据进行处理 它由数据库中的数据填充 我有一个用户控件 它接受任何自定义数据集并在数据网格中显示内容 这用于测试和调试 为了使控件可重用 我将自定义数据集视为普通的 Sy
  • 这些作业之间是否存在顺序点?

    以下代码中的两个赋值之间是否存在序列点 f f x 1 1 x 2 不 没有 在这种情况下 标准确实是含糊不清的 如果你想确认这一点 gcc 有这个非常酷的选项 Wsequence point在这种情况下 它会警告您该操作可能未定义
  • 为什么编译时浮点计算可能不会得到与运行时计算相同的结果?

    In the speaker mentioned Compile time floating point calculations might not have the same results as runtime calculation
  • C# 成员变量继承

    我对 C 有点陌生 但我在编程方面有相当广泛的背景 我想做的事情 为游戏定义不同的 MapTiles 我已经像这样定义了 MapTile 基类 public class MapTile public Texture2D texture pu
  • 基于 OpenCV 边缘的物体检测 C++

    我有一个应用程序 我必须检测场景中某些项目的存在 这些项目可以旋转并稍微缩放 更大或更小 我尝试过使用关键点检测器 但它们不够快且不够准确 因此 我决定首先使用 Canny 或更快的边缘检测算法 检测模板和搜索区域中的边缘 然后匹配边缘以查
  • 哪种 C 数据类型可以表示 40 位二进制数?

    我需要表示一个40位的二进制数 应该使用哪种 C 数据类型来处理这个问题 如果您使用的是 C99 或 C11 兼容编译器 则使用int least64 t以获得最大的兼容性 或者 如果您想要无符号类型 uint least64 t 这些都定
  • 如何在文本框中插入图像

    有没有办法在文本框中插入图像 我正在开发一个聊天应用程序 我想用图标图像更改值 等 但我找不到如何在文本框中插入图像 Thanks 如果您使用 RichTextBox 进行聊天 请查看Paste http msdn microsoft co
  • C++ 中类级 new 删除运算符的线程安全

    我在我的一门课程中重新实现了新 删除运算符 现在我正在使我的代码成为多线程 并想了解这些运算符是否也需要线程安全 我在某处读到 Visual Studio 中默认的 new delete 运算符是线程安全的 但这对于我的类的自定义 new
  • 使用.NET技术录制屏幕视频[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 有没有一种方法可以使用 NET 技术来录制屏幕 无论是桌面还是窗口 我的目标是免费的 我喜欢小型 低

随机推荐

  • 微信小程序切片工具-右滑删除效果(带视频)右滑删除效果(带视频)-史上最简单、最快的的右滑制作

    下面讲解如何进行小程序的右滑删除效果 史上最简单 最快的的右滑制作 视频及演示文件下载地址 http www ymznkf com resources view aspx id 1507 1 导入效果图 并按规则进行切片 2 设置列表的数据
  • 2023node期末课设-超市管理系统node+js+css+html+mysql(附下载链接)

    超市管理系统node js css html mysql 源码 数据库文件 介绍文档 点我下载项目资源 后端部分 后端用node启用了四个服务器 四个服务器分别为可以启动对应的页面 前端显示图标的数据均为数据库获取 操作数据库可以实时更改页
  • 关于mvvm简易封装(一)

    前言 关于mvvm的出现已经很长一段时间了 但是博主一直没有太过于关注 但是由于最近接触的和新出的很多框架都是基于mvvm模式去开发的 于是花了点时间看了下 关于学习mvvm前 可能需要首先了解databing 请自行百度了 介绍datab
  • 音视频造数据的路

    目录 1 多路数据制造 1 合并多路 2 视频修改分辨率 3 修改视频码率 4 修改帧率 2 音频流多声道合成 1 双声道合并单声道 2 双声道提取 3 双声道转双音频流 4 单声道转双声道 5 两路音频合并双声道 6 合并多声道 7 声道
  • 光收发器安装介绍,光纤收发器连接示意图解

    对于光纤布线来讲光纤收发器都是非常熟悉的产品了 在光纤网络中 我们常常会使用到光纤收发器 那么 在网络布线过程中光纤收发器该怎么连接呢 接下来飞畅科技的小编就来为大家介绍下光纤收发器安装以及连接图解 感兴趣的朋友一起来看看吧 一 光收发器安
  • java实现excel的导出之使用easyExcel

    前言 在我们的项目需求中 经常会遇到导出的需求 其中excel的导出最为常见 生成Excel比较有名的框架有Apache poi jxl等 但他们都存在一个严重的问题就是非常的耗内存 如果你的系统并发量不大的话可能还行 但是一旦并发上来后一
  • PCL K4PCS算法实现点云配准

    目录 一 算法原理 1 算法概述 2 算法流程 3 参考文献 二 代码实现 三 结果展示 一 算法原理 1 算法概述 K 4PCS方法主要分为两个步骤 1 利用VoxelGrid滤波器对点云进行下采样 然后使用标准方法 3D harris或
  • 通过screw生成数据库文档,支持(WORD,HTML,MD)

    文章目录 前言 一 使用步骤 基于springboot项目 1 pom xml引入 2 运行screw 3 查看文档效果 前言 你还在通过手写数据库文档吗 out了 通过screw插件一键生成数据库文档 可生成HTML WORD MD三种类
  • 串口通信(PC-51单片机)

    实验现象 下载程序后打开串口调试助手 将波特率设置为4800 选择发送的数据就可以显示 接线说明 具体接线图可见开发攻略对应实验的 实验现象 章节 注意事项 include reg52 h
  • Luci的工作流程

    1 浏览器敲入192 168 1 1后就 路由器作为uhttp server会把 www index html这个页面返回给浏览器 而且这个页面又会刷新 去请求页面 luci cgi 代码如红色标记
  • vue中使用cookies和crypto-js实现记住密码和加密

    不多BB 搞快 搞快 使用crypto js加解密 第一步 安装 npm install crypto js 第二步 在你需要的vue组件内import import CryptoJS from crypto js 第三步 使用 Encry
  • 【Idea技巧】01.Idea无法打开,报错 Start Failed

    序章 个人使用Idea版本 借鉴文章 添加链接描述 解决方案 管理员命令cmd netsh int ipv4 set dynamicport tcp start 49152 num 16383 netsh int ipv4 set dyna
  • 怎么用计算机计算年月份,如何使用Excel计算两个日期之间的月数?

    一 这可以通过DATEDIF函数完成 二 DATEDIF函数的定义 DATEDIF函数是Excel中的隐藏函数 而不是帮助和插入公式中的隐藏函数 返回两个日期之间的年 月 日间隔的数量 DATEDIF函数通常用于计算两个日期之间的时差 语法
  • Windows11之QT开发框架超详细下载安装与使用教程

    文章目录 前言 3 1 QT开发框架下载 3 2 QT开发框架安装 3 3 QT开发框架使用 总结 前言 本博客的主要内容为在Windows11系统下的QT开发框架的下载安装与使用教程 QT开发框架开发C 图形化界面十分有用 读者跟着我一步
  • 球坐标系下梯度、散度、旋度和拉普拉斯的简单计算

    转载于 https www cnblogs com hiramlee0534 p 5480045 html
  • 七天玩转Redis

    一 简要了解 redis是一个key value存储系统 和Memcached类似 它支持存储的value类型相对更多 包括string 字符串 list 链表 set 集合 zset sorted set 有序集合 和hash 哈希类型
  • ELK系列(九)、配置ES和Kibana的用户密码

    前面介绍的都是没有设置密码的情况 ES默认没有密码 什么数据泄露的新闻简直是家常便饭 所以这里还是建议大家给ES和kibana设置用户登陆 或者使用nginx限制IP或用户访问 本文介绍ELK自带的创建用户的方式 ELK系列 一 安装Ela
  • CSDN编程竞赛第六期

    CSDN编程竞赛报名地址 https edu csdn net contest detail 16 本次是我第二次参加CSDN举办的编程竞赛 这一次的题相比上一次简单不少 对编程新人或者刚开始学习算法的人很友好 前言 背景 本次CSDN编程
  • 服务器管理系统是什么

    服务器管理系统是什么 服务器管理系统 是在操作系统下对操作系统的服务器软件及其相关软件进行二次设置的管理软件 是运营商管理域名 服务器 企业邮局 数据库等服务器主机类产品的一个网站平台 以达到快捷实现域名 服务器主机 企业邮局 数据库等产品
  • C#连接数据库SQlServer+Form窗格实现简单动态增删查改操作

    C 连接数据库SQlServer Form窗格实现简单动态增删查改操作 一 数据库连接 数据库连接部分学习自该博主原创博客 点击即可跳转 再附上该博主的博客链接 https blog csdn net kiss soul article d