visual studio连接sql server数据库

目录

    • 1、为什么要建立连接
    • [2、在sql server中建立数据库](#2、在sql server中建立数据库)
    • [3、visual studio连接sql server数据库](#3、visual studio连接sql server数据库)
    • 4、学生信息管理系统页面布局
    • 5、添加事件逻辑
      • [5.1 页面跳转](#5.1 页面跳转)
      • [5.2 读取学生信息](#5.2 读取学生信息)
      • [5.3 查询学生信息](#5.3 查询学生信息)
      • [5.4 修改学生信息](#5.4 修改学生信息)
      • [5.5 删除学生信息](#5.5 删除学生信息)
      • [5.6 添加学生信息](#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个学生的信息。

sql 复制代码
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。


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。

cs 复制代码
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 查询学生信息

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

cs 复制代码
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 修改学生信息

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

cs 复制代码
        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 删除学生信息

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

cs 复制代码
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 添加学生信息

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

cs 复制代码
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();
        }
相关推荐
小陈工3 小时前
Python Web开发入门(十七):Vue.js与Python后端集成——让前后端真正“握手言和“
开发语言·前端·javascript·数据库·vue.js·人工智能·python
科技小花7 小时前
数据治理平台架构演进观察:AI原生设计如何重构企业数据管理范式
数据库·重构·架构·数据治理·ai-native·ai原生
一江寒逸7 小时前
零基础从入门到精通MySQL(中篇):进阶篇——吃透多表查询、事务核心与高级特性,搞定复杂业务SQL
数据库·sql·mysql
D4c-lovetrain7 小时前
linux个人心得22 (mysql)
数据库·mysql
阿里小阿希8 小时前
CentOS7 PostgreSQL 9.2 升级到 15 完整教程
数据库·postgresql
荒川之神8 小时前
Oracle 数据仓库雪花模型设计(完整实战方案)
数据库·数据仓库·oracle
做个文艺程序员8 小时前
MySQL安全加固十大硬核操作
数据库·mysql·安全
不吃香菜学java8 小时前
Redis简单应用
数据库·spring boot·tomcat·maven
计算机安禾8 小时前
【数据结构与算法】第36篇:排序大总结:稳定性、时间复杂度与适用场景
c语言·数据结构·c++·算法·链表·线性回归·visual studio
一个天蝎座 白勺 程序猿9 小时前
Apache IoTDB(15):IoTDB查询写回(INTO子句)深度解析——从语法到实战的ETL全链路指南
数据库·apache·etl·iotdb