visual studio连接sql server数据库

news2025/1/4 22:02:57
目录
    • 1、为什么要建立连接
    • 2、在sql server中建立数据库
    • 3、visual studio连接sql server数据库
    • 4、学生信息管理系统页面布局
    • 5、添加事件逻辑
      • 5.1 页面跳转
      • 5.2 读取学生信息
      • 5.3 查询学生信息
      • 5.4 修改学生信息
      • 5.5 删除学生信息
      • 5.6 添加学生信息

bilibili演示视频
github源码


1、为什么要建立连接

sql server是关系数据库管理系统,专门用来查询、操作和管理数据库。visual studio和sql server连接后,可以读取数据库中的数据,还能对数据进行增删改查。比如,我们在visual studio中用C#语言开发一个学生信息管理软件,具体功能有读取学生信息、更改学生信息、删除学生信息、添加学生信息等,这些学生的信息就存储在sql server中,软件可以根据用户的操作读取和更改数据库中的信息。

2、在sql server中建立数据库

打开SQL Server Management Studio(SSMS)软件,连接到服务器。
选择“数据库”,右键,“新建数据库”,建立一个学生信息数据库,数据库名为StuMes。

在这里插入图片描述
输入数据库名称,点击确定。这样,学生信息数据库就建立好了。

在这里插入图片描述

在数据库中新建一个表,用来存储学生信息,包括姓名、年龄、性别、学号。
点击“表”,右键,“新建”–>“表”。

在这里插入图片描述
输入列名和数据类型。

在这里插入图片描述
在这里插入图片描述

保存,输入表名称Table_Stu,点击确定。

在这里插入图片描述

选择StuMes数据库,右键,刷新,这时就可以看到刚刚新建的表了,目前表中只包含列名,没有实际的内容。当然,列的添加也可以通过代码的方式,我这里是手动添加的。

在这里插入图片描述

向表中添加学生信息。点击“新建查询”,通过代码的方式向表中添加5个学生的信息。

在这里插入图片描述

代码的意思是,向Table_Stu表中插入这5个学生的信息。

在这里插入图片描述

insert into Table_Stu(Name,Age,Sex,StuNum) values('小王','18','男','12345')
insert into Table_Stu(Name,Age,Sex,StuNum) values('小白','20','男','12323')
insert into Table_Stu(Name,Age,Sex,StuNum) values('小黑','19','男','11223')
insert into Table_Stu(Name,Age,Sex,StuNum) values('小赵','18','女','32145')
insert into Table_Stu(Name,Age,Sex,StuNum) values('小兰','21','男','13254')

全选代码,点击执行,这样就将5条学生信息记录到了数据库中的表中了。

在这里插入图片描述

在这里插入图片描述

3、visual studio连接sql server数据库

首先,新建一个C# Windows窗体应用 项目,我这里项目名称为DataConnect,点击确定。

在这里插入图片描述
项目建立好后,点击“工具”–>“连接到数据库”,

在这里插入图片描述
数据源选择“Microsoft SQL Server(SqlClient)”,还需要输入服务器名,以及选择数据库名称。
在这里插入图片描述
在SQL Server Management Studio软件点击“文件”–>“连接对象资源管理器”,复制“服务器名称”,粘贴过来,这时就可以通过下拉框选择刚创建的学生信息数据库了。点击确定。

在这里插入图片描述

在这里插入图片描述
这样就可以在visual studio“服务器资源管理器”中看到连接到的数据库了。

在这里插入图片描述

4、学生信息管理系统页面布局

双击打开Form1.cs文件,该文件对应的是图中所示的窗体,我们向窗体中拖入控件,包括1个DataGridView用于显示数据库表格数据,和5个Button用于触发事件,打开跳转界面。我们为学生信息管理系统设置了5个功能,分别是学生信息读取、学生信息查询、学生信息修改、学生信息删除、学生信息添加,DataGridView用于显示学生信息。具体的控件添加方法见WinForms添加Button控件。

在这里插入图片描述

将第一个Button的Name改为“btnRead”,text改为“读取”;将第二个Button的Name改为“btnFind”,text改为“查询”;将第三个Button的Name改为“btnChange”,text改为“修改”;将第四个Button的Name改为“btnDel”,text改为“删除”;将第五个Button的Name改为“btnAdd”,text改为“添加”。将窗体的Text改为“学生信息管理系统”。就这样,第一个窗体的布局完毕。

在这里插入图片描述

点击项目,右键,新建Windows窗体,新建窗体作为跳转界面,当主界面点击“查询”、“修改”、“删除”、“添加”后,会跳转到相应窗体。

在这里插入图片描述

在这里插入图片描述

5、添加事件逻辑

上面我们完成了页面的绘制,但是仅仅这样并没有什么用,我们运行代码后,点击界面并不会发生任何事情,这是因为我们没有添加逻辑,也就是没有写代码,winform并不知道我们添加的这些控件是用来干什么的,下面,就依次来添加功能代码。

5.1 页面跳转

双击“查询”控件,会跳转到该控件背后的代码。当鼠标点击控件后,btnFind_Click()函数会被执行,我们要实现的效果是点击“查询”后,页面跳转,因此就需要将代码添加到该函数下。

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

同样的,给“修改”、“删除”、“添加”也加上相同的功能。

5.2 读取学生信息

从数据库表格中读取学生信息,DataGridView显示。
点击项目,右键,添加类。默认命名为Class1.cs。

在这里插入图片描述
在这里插入图片描述

using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace DataConnect
{
    class Class1
    {
        public SqlConnection conn;
        public SqlConnection Connect()  //连接数据库
        {
            //Data Source指定本地数据库,Initial Catalog指定数据库名称
            //Integrated Security=True 表示使用集成安全性,也就是说,用户
            //的Windows帐户身份将被用来验证数据库连接,而不是使用账号和密码。
            string str = @"Data Source=.;Initial Catalog=StuMes;Integrated Security=True"; //数据库连接字符串
            //string constr = "server=localhost;database=数据库名;uid=账号;pwd=密码;";
            conn = new SqlConnection(str);  //创建SqlConnection对象
            conn.Open();  //打开数据库连接
            return conn;
            
        }

        public SqlCommand Command(string sql) //执行一条sql命令
        {
            SqlCommand cmd = new SqlCommand(sql, Connect());
            return cmd;
        }

        public int Execute(string sql) //获取执行sql命令后,数据库表中数据条数的更新数量,用来判断命令是否执行成功
        {
            return Command(sql).ExecuteNonQuery();
        }

        public SqlDataReader Read(string sql) //读取数据库中的数据
        {
            return Command(sql).ExecuteReader();
        }

        public void Close() //关闭数据库
        {
            conn.Close();
        }
        
    }
}

双击“读取”,进入代码,在函数中输入代码,我们要实现的效果是,点击“读取”后,程序获取数据库数据,返回连接结果,并将获取的数据显示在DataGridView。
在这里插入图片描述

private void btnRead_Click(object sender, EventArgs e)
        {
            Class1 c1 = new Class1(); //创建类对象
            c1.Connect(); //连接并打开数据库

            string sql = "SELECT * FROM Table_Stu"; //选择表中所有数据
            SqlCommand co = c1.Command(sql);  //执行命令
            SqlDataAdapter adapt = new SqlDataAdapter();
            adapt.SelectCommand = co;
            DataSet ds = new DataSet();
            adapt.Fill(ds, "t");    //第二个参数:表名,随便取
            dataGridView1.DataSource = ds.Tables["t"];

            c1.Close();
        }

在这里插入图片描述

5.3 查询学生信息

通过学号进行学生信息的查询,如果查询的学生在数据库中,则返回学生的完整信息,否则,给出提示信息。

private void btnOk_Click(object sender, EventArgs e)
        {
            string num = txtNum.Text;
            if(num!="")
            {
                Class1 c1 = new Class1();
                c1.Connect();
                
                string sql = $"select * from Table_Stu where StuNum={int.Parse(num)}";
                SqlDataReader reader = c1.Read(sql);
                bool flag = reader.Read();
                if (flag==true)
                {
                    MessageBox.Show("查询成功");
                    SqlCommand co = c1.Command(sql);  //执行命令
                    SqlDataAdapter adapt = new SqlDataAdapter();
                    adapt.SelectCommand = co;
                    DataSet ds = new DataSet();
                    adapt.Fill(ds, "t");    //第二个参数:表名,随便取
                    dataGridView1.DataSource = ds.Tables["t"];
                }
                else
                {
                    MessageBox.Show("不存在输入的学号信息");
                    dataGridView1.DataSource = null;
                    return;
                }


                c1.Close();
            }
            else
            {
                MessageBox.Show("请输入学号");
            }
        }

private void btnExit_Click(object sender, EventArgs e)
        {
            this.Close();
        }

在这里插入图片描述
在这里插入图片描述

5.4 修改学生信息

先判断输入的学号是否存在于数据库中,如果不存在,就返回提示信息;否则,就进行修改。

        private void btnExit_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void btnOk_Click(object sender, EventArgs e)
        {
            string name = txtName.Text;
            string age = txtAge.Text;
            string sex = comSex.Text;
            string num = txtNum.Text;
            if (num != "")
            {
                Class1 c1 = new Class1();
                c1.Connect();

                string sql = $"select * from Table_Stu where StuNum={int.Parse(num)}";
                SqlDataReader reader = c1.Read(sql);
                bool flag = reader.Read();
                if (flag == true)
                {
                    //MessageBox.Show("查询成功");
                    if (name == "" || age == "" || sex == "")
                    {
                        MessageBox.Show("请将信息填写完整");
                    }
                    else
                    {
                        sql = $"delete from Table_Stu where StuNum={int.Parse(num)}";
                        c1.Execute(sql); //执行命令
                        sql = $"insert into Table_Stu values('{name}','{age}','{sex}','{num}')";
                        c1.Execute(sql);
                        MessageBox.Show("修改信息成功");
                    }
                }
                else
                {
                    MessageBox.Show("不存在输入的学号信息");
                    return;
                }
                c1.Close();
            }
            else
            {
                MessageBox.Show("请输入学号");
            }
            
            }
        }
    }
5.5 删除学生信息

输入学号,判断是否存在于数据库中,没有则返回提示信息,有则删除该条信息。

private void btnExit_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void btnOk_Click(object sender, EventArgs e)
        {
            string num = txtNum.Text;
            if(num!="")
            {
                Class1 c1 = new Class1();
                c1.Connect();

                string sql = $"select * from Table_Stu where StuNum={int.Parse(num)}";
                SqlDataReader reader = c1.Read(sql);
                bool flag = reader.Read();
                if (flag == true)
                {
                    sql = $"delete from Table_Stu where StuNum={int.Parse(num)}";
                    c1.Execute(sql); //执行命令
                    MessageBox.Show("删除信息成功");
                }
                else
                {
                    MessageBox.Show("不存在输入的学号信息");
                    return;
                }
                c1.Close();
            }
            else
            {
                MessageBox.Show("请输入学号");
            }
        }
5.6 添加学生信息

先判断输入的学生学号在数据库中是否存在,如果存在,则返回提示信息,否则就添加信息到数据库,同时,输入的信息需要完整。

private void btnExit_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void btnOk_Click(object sender, EventArgs e)
        {
            string name = txtName.Text;
            string age = txtAge.Text;
            string sex = comSex.Text;
            string num = txtNum.Text;

            Class1 c1 = new Class1();
            c1.Connect();

            string sql = "select * from Table_Stu";

            SqlDataReader reader = c1.Read(sql);
            reader.Read();
            string tmp = reader[3].ToString();

            if (name == "" || age == "" || sex == "" || num == "")
            {
                MessageBox.Show("请输入完整信息");
            }
            else
            {
                if(tmp==num)
                {
                    MessageBox.Show("您输入的学号已存在,请重新输入");
                    return;
                }
                else
                {
                    sql = $"insert into Table_Stu values('{name}','{age}','{sex}','{num}')";
                    c1.Execute(sql);
                    MessageBox.Show("添加信息成功");
                }
            }
            c1.Close();
        }

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

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

相关文章

STM32-笔记23-超声波传感器HC-SR04

一、简介 HC-SR04 工作参数&#xff1a; • 探测距离&#xff1a;2~600cm • 探测精度&#xff1a;0.1cm1% • 感应角度&#xff1a;<15 • 输出方式&#xff1a;GPIO • 工作电压&#xff1a;DC 3~5.5V • 工作电流&#xff1a;5.3mA • 工作温度&#xff1a;-40~85℃ 怎么…

vuex - 第一天

思维逻辑 解决问题 代码能力2 vue2的项目 北京前端鸿蒙6期 语雀 vuex 在组件中使用 插件支持v2和v3 宏任务 和 微任务 多问问自己为什么 new的四步 查找数组里是否包含某个元素 同步任务、异步任务、微任务、宏任务

三大行业案例:AI大模型+Agent实践全景

本文将从AI Agent和大模型的发展背景切入&#xff0c;结合51Talk、哈啰出行以及B站三个各具特色的行业案例&#xff0c;带你一窥事件驱动架构、RAG技术、人机协作流程&#xff0c;以及一整套行之有效的实操方法。具体包含内容有&#xff1a;51Talk如何让智能客服“主动进攻”&a…

STM32G0B1 can Error_Handler 解决方法

问题现象 MCU上电&#xff0c;发送0x13帧数据固定进入 Error_Handler 硬件介绍 MCU :STM32G0B1 can:NSI1042 tx 接TX RX 接RX 折腾了一下午&#xff0c;无解&#xff0c;问题依旧&#xff1b; 对比测试 STM32G431 手头有块G431 官方评估版CAN 模块&#xff1b; 同样的…

【服务器】上传文件到服务器并训练深度学习模型下载服务器文件到本地

前言&#xff1a;本文教程为&#xff0c;上传文件到服务器并训练深度学习模型&#xff0c;与下载服务器文件到本地。演示指令输入&#xff0c;完整的上传文件到服务器&#xff0c;并训练模型过程&#xff1b;并演示完整的下载服务器文件到本地的过程。 本文使用的服务器为云服…

基于微博热搜评论的情感分析与热点主题挖掘研究

目录 1、绪论 1.1 研究背景与研究意义 1.2 数据来源 1.3 技术路线 2、数据预处理 2.1 数据清洗与准备 2.2 导入必要库与加载数据 2.3 加载停用词表与分词处理 2.4 统计词频与高频词分析 3、情感分析与主题建模 3.1 情感分析 3.2 主题建模 3.3 热点主题识别 4、数据可视…

“进制转换”公式大集合

咱们都知道十进制是“逢10进1 ”&#xff0c;同理&#xff0c;N进制就是 “逢N进1”。进制其实就这么简单。它的麻烦之处在于各种进制之间的转换。 一、十进制整数转N进制 1&#xff0e;十进制转二进制 除2取余法&#xff1a;连续除以2&#xff0c;直到商为0&#xff0c;逆序…

【React】- 跨域PDF预览、下载(改文件名)、打印

我们经常会碰到跨域来方位PDF&#xff0c;同时需要下载、打印的需求&#xff0c;通常由于浏览器的安全策略&#xff0c;可以预览&#xff0c;但是下载和打印可能会受限&#xff0c;这时候怎么办呢&#xff1f; 1.创建一个隐藏的标签 要下载 iframe 中的 PDF 文件&#xff0c;…

echarts 柱形图重叠柱形图legend,双y轴

echarts 图表组件&#xff1a; <template><div :style"{ height: 100% }"><div class"foldLine" ref"foldLine" :style"{ width: widths, height: heights }"></div></div> </template> <scr…

MySQL5.7主从同步配置

环境&#xff1a; 使用2台虚拟机&#xff0c;如图-1所示。其中192.168.4.51是主服务器,另一台192.168.4.52作为从服务器&#xff0c;通过调取主服务器上的binlog日志&#xff0c;在本地重做对应的库、表&#xff0c;实现与主服务器的数据同步。 主服务器、从服务器都已安装好m…

方正畅享全媒体新闻采编系统 imageProxy.do 任意文件读取漏洞复现

0x01 产品简介 方正畅享全媒体新闻生产系统是以内容资产为核心的智能化融合媒体业务平台,融合了报、网、端、微、自媒体分发平台等全渠道内容。该平台由协调指挥调度、数据资源聚合、融合生产、全渠道发布、智能传播分析、融合考核等多个平台组成,贯穿新闻生产策、采、编、发…

Ubuntu安装Apache Airflow详细指南

本文我们介绍如何在Ubuntu上安装Apache Airflow。Apache Airflow旨在通过编程方式编写、调度和监控工作流。随着数据编排在现代数据工程中变得越来越重要&#xff0c;掌握Apache Airflow等工具可以显著提高您的生产力和效率。 学习Apache Airflow的首要任务是安装单机版本进行测…

生物信息学软件开发综述学习

目录 ①编程语言和开源工具和库 ②轻量级 R 包开发 ③大规模组学软件开发 ④示例 1.轻量级 R 包开发示例及数据 2.大规模组学软件开发 文献&#xff1a;Bioinformatics software development: Principles and future directions ①编程语言和开源工具和库 在生物信息学…

哈夫曼编码(Huffman Coding)与哈夫曼树(Huffman Tree)

已知字符集{a,b,c,d,e,f}&#xff0c;若各字符出现的次数分别为6&#xff0c;3&#xff0c;8&#xff0c;2&#xff0c;10&#xff0c;4&#xff0c;则对应字符集中各字符的哈夫曼编码可能是&#xff08; &#xff09;。 A.00&#xff0c;1011&#xff0c;01&#xff0…

Eureka 介绍与原理详解

在微服务架构中&#xff0c;服务发现&#xff08;Service Discovery&#xff09;是一个至关重要的组件。随着服务数量的增加&#xff0c;手动管理服务的地址和端口变得不切实际。Eureka 是 Netflix 开源的一款服务发现工具&#xff0c;旨在解决微服务架构中的服务注册与发现问题…

C++和OpenGL实现3D游戏编程【连载19】——着色器光照初步(平行光和光照贴图)(附源码)

1、本节要实现的内容 我们在前期的教程中,讨论了在即时渲染模式下的光照内容。但在我们后期使用着色器的核心模式下,会经常在着色器中使光照,我们这里就讨论一下着色器光照效果,以及光照贴图效果,同时这里知识会为后期的更多光照效果做一些铺垫。本节我们首先讨论冯氏光照…

RedisDesktopManager新版本不再支持SSH连接远程redis后

背景 RedisDesktopManager(又名RDM)是一个用于Windows、Linux和MacOS的快速开源Redis数据库管理应用程序。这几天从新下载RedisDesktopManager最新版本&#xff0c;结果发现新版本开始不支持SSH连接远程redis了。 解决方案 第一种 根据网上有效的信息&#xff0c;可以回退版…

【图像处理lec10】图像压缩

目录 一、图像压缩基础 1、图像压缩的基本概念 2、数据冗余与压缩比 3、三种主要的数据冗余类型 4、保真度评估标准&#xff08;Fidelity Criteria&#xff09; 5、应用与实践 二、图像压缩模型 1、图像压缩模型概述 &#xff08;1&#xff09;压缩系统的结构 &#…

Python-网络爬虫

随着网络的迅速发展&#xff0c;如何有效地提取并利用信息已经成为一个巨大的挑战。为了更高效地获取指定信息&#xff0c;需定向抓取并分析网页资源&#xff0c;从而促进了网络爬虫的发展。本章将介绍使用Python编写网络爬虫的方法。 学习目标&#xff1a; 理解网络爬虫的基本…

curl+openssl 踩坑笔记

curl编译&#xff1a;点击跳转 踩坑一 * SSL certificate problem: unable to get local issuer certificate * closing connection #0 curl: (60) SSL certificate problem: unable to get local issuer certificate More details here: https://curl.se/docs/sslcerts.html …