当前位置: 首页 > news >正文

如何使用C#与SQL Server数据库进行交互

一.创建数据库

用VS 创建数据库的步骤:

1.打开vs,创建一个新项目,分别在搜素框中选择C#、Windows、桌面,然后选择Windows窗体应用(.NET Framework)

2.打开“视图-服务器资源管理器”,右键单击“数据连接”,如图。在弹出的菜单中选择【创建新SQL Server 数据库】选项,弹出“创建新的SQL Server数据库”对话框。

3.对应项目,系统添加数据库连接。(要是电脑没有sql server,可以选中“视图-sql server资源管理器”创建数据库)

连接成功即如下(第一次可能只有一个)

4.新建数据库XSCJDB(学生成绩数据库),点开第二个小三角-右键点击数据库-添加新数据库

自己取名(最好采用英文命名)

5.选中该数据库并创建新表student,点击新建数据库前的小三角-右键表-添加新表

6.表中插入属性,双击即可打开

7.右键选中表查看表中数据

二.使用控件实现连接数据库并对其操作

(1)在工具箱中拖出dataGridView控件和botton控件(可以改名使其功能明确)

(2)双击botton1,进入代码编写(检查数据库的连接)

 private void button1_Click(object sender, EventArgs e){ string strcom = @"Data Source = (localdb)ProjectModels;Initial Catalog = XSCJDB; Integrated Security = True;";SqlConnection sqlcon;using (sqlcon = new SqlConnection(strcom)){sqlcon.Open();MessageBox.Show("数据库连接状态" + sqlcon.State.ToString(), "第一个对话框");}MessageBox.Show("数据库连接状态" + sqlcon.State.ToString(), "第二个对话框");}

注意:

此处应根据自己的电脑修改,具体步骤如下:

单击刚建的数据库-在右下角解决方案资源管理器中找到连接字符串-复制第一个True前面的内容

(3)双击双击botton2,进入代码编写(插入数据)

  private void button2_Click(object sender, EventArgs e){string strcom = @"Data Source = (localdb)ProjectModels;Initial Catalog = XSCJDB; Integrated Security = True;";SqlConnection conn =null;try{conn = new SqlConnection(strcom);conn.Open();SqlCommand mycmm= new SqlCommand();mycmm.Connection = conn;mycmm.CommandType = CommandType.Text;mycmm.CommandText = @"insert intostudent(Id,name,major,grade,tel)values(@Id,@name,@major,@grade,@tel)";mycmm.Parameters.Add(new SqlParameter("@Id", 2022002));mycmm.Parameters.Add(new SqlParameter("@name", "李四"));mycmm.Parameters.Add(new SqlParameter("@major", "CS"));mycmm.Parameters.Add(new SqlParameter("@grade","80"));mycmm.Parameters.Add(new SqlParameter("@tel","13999216"));int returnvalue=mycmm.ExecuteNonQuery();if(returnvalue!=-1){MessageBox.Show("数据插入成功");}}catch(Exception ex) {if(conn != null){MessageBox.Show("数据插入失败" + ex.Message);}}}

(4)双击双击botton3,进入代码编写(查询全部数据)

 // 处理button3的点击事件,从数据库中查询并显示所有数据private void button3_Click(object sender, EventArgs e){// 数据库连接字符串string strcom = @"Data Source = (localdb)ProjectModels;Initial Catalog = XSCJDB; Integrated Security = True;";SqlConnection conn = null;try{// 初始化并打开数据库连接conn = new SqlConnection(strcom);conn.Open();// 创建并配置SqlCommand对象SqlCommand mycmm = new SqlCommand{Connection = conn,CommandType = CommandType.Text,CommandText = @"select * from student"};// 使用SqlDataAdapter填充DataSetSqlDataAdapter sda = new SqlDataAdapter(mycmm);DataSet ds = new DataSet();sda.Fill(ds, "studentList");// 显示查询结果到DataGridViewdataGridView2.DataSource = ds.Tables["studentList"].DefaultView;// 关闭数据库连接conn.Close();}catch (Exception ex){// 处理异常MessageBox.Show(ex.Message);if (conn != null){conn.Close();}}}

(5)在设计界面再拖入botton以及一个textbox(用于根据姓名查询)

(6)编写botton4代码(按名字查询)

       // 处理button4的点击事件,根据名字查询数据private void button4_Click(object sender, EventArgs e){// 数据库连接字符串string strcon = @"Data Source = (localdb)ProjectModels;Initial Catalog = XSCJDB; Integrated Security = True;";SqlConnection myConnection = new SqlConnection(strcon);try{// 打开数据库连接myConnection.Open();// 创建并配置SqlCommand对象SqlCommand myCommand = new SqlCommand{Connection = myConnection,CommandType = CommandType.Text,CommandText = @"select * from student where name =@name"};// 添加参数并赋值myCommand.Parameters.Add(new SqlParameter("@name", textBox1.Text));// 执行查询命令并检查结果int res = Convert.ToInt32(myCommand.ExecuteScalar());if (res == 0){throw new Exception("查无此人");}// 使用SqlDataAdapter填充DataSetSqlDataAdapter sda = new SqlDataAdapter(myCommand);DataSet ds = new DataSet();sda.Fill(ds, "xr");// 显示查询结果到DataGridViewdataGridView2.DataSource = ds.Tables["xr"].DefaultView;// 关闭数据库连接myConnection.Close();}catch (Exception ex){// 处理异常MessageBox.Show(ex.ToString());if (myConnection != null){myConnection.Close();}}}

(7)对于dataGritView的代码

// 保存编辑单元格的原始值
object cellTempValue = null;// 单元格开始编辑事件
private void dataGridView2_CellBeginEdit(object sender, DataGridViewCellCancelEventArgs e)
{// 保存单元格的原始值cellTempValue = this.dataGridView2.Rows[e.RowIndex].Cells[e.ColumnIndex].Value;
}// 单元格结束编辑事件
private void dataGridView2_CellEndEdit(object sender, DataGridViewCellEventArgs e)
{// 如果单元格值没有改变,返回if (object.Equals(cellTempValue, this.dataGridView2.Rows[e.RowIndex].Cells[e.ColumnIndex].Value)){return;}// 弹出确认修改对话框if (MessageBox.Show("是否确定修改,并更新到数据库", "提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Question) != DialogResult.OK){// 如果取消修改,恢复原值this.dataGridView2.Rows[e.RowIndex].Cells[e.ColumnIndex].Value = cellTempValue;return;}// 数据库连接字符串string strcom = @"your string";SqlConnection myConnection = new SqlConnection(strcom);try{// 打开数据库连接myConnection.Open();// 创建并配置SqlCommand对象SqlCommand myCommand = new SqlCommand{Connection = myConnection,CommandType = CommandType.Text};// 构建更新SQL语句string strSql = String.Format("update student set {0}='{1}' where Id='{2}'",this.dataGridView2.Columns[e.ColumnIndex].HeaderText, // 当前选择的列名this.dataGridView2.Rows[e.RowIndex].Cells[e.ColumnIndex].Value, // 选中单元格修改后的值this.dataGridView2.Rows[e.RowIndex].Cells[0].Value // 选中单元格修改前的值);// 设置命令文本myCommand.CommandText = strSql;// 执行更新命令int res = myCommand.ExecuteNonQuery();// 检查更新是否成功if (res == 0){throw new Exception("修改失败");}else{MessageBox.Show("修改成功");}// 关闭数据库连接myConnection.Close();}catch (Exception ex){// 处理异常MessageBox.Show(ex.ToString());if (myConnection != null){myConnection.Close();}}
}

三.实现

1.设计界面

2.运行

2.1连接数据库(点击连接数据库-确定-确定)即连接成功

2.2增加数据

2.3查询全部数据

2.4按名字查询

四.小结及易错点

这个Windows Forms应用程序展示了如何连接本地数据库XSCJDB,并实现了数据插入、查询和删除等基本功能。以下是对该应用程序的小结:

1. 数据库连接与测试:通过点击按钮可以测试与数据库的连接,确保应用程序能够成功连接到本地数据库XSCJDB。

2. 数据插入:点击相应按钮可以将预设的学生信息插入到数据库的student表中,这提供了一种简单的数据录入方式。

3. 数据查询:通过点击按钮,应用程序能够查询并显示student表中的所有数据,使用户可以轻松地查看数据库中存储的信息。

4. 按姓名查询:应用程序还提供了按姓名查询学生数据的功能,用户只需输入学生姓名,即可获取相应的学生信息。

5. 数据删除:用户可以根据学生姓名删除相应的学生记录,这增加了对数据的管理和维护功能。

在编写这个应用程序时,需要注意以下易错点:

  • 数据库连接字符串的正确性:确保连接字符串中的数据库名称、实例名称等信息正确无误,以保证成功连接到数据库。
  • SQL语句的准确性:编写SQL语句时,应确保表名和字段名与数据库中定义的一致,以避免出现语法错误。
  • 参数化查询的使用:在执行SQL操作时,应该使用参数化查询来防止SQL注入攻击,提高数据安全性。
  • 数据库连接的管理:在编写代码时,应该使用try-finally块或者using语句来管理数据库连接,确保在异常情况下正确关闭连接,以避免资源泄漏。
  • 异常处理和错误提示:捕获并处理所有可能的异常,向用户提供友好的错误提示信息,帮助用户理解问题所在并采取相应的措施。

通过对这些易错点的注意和处理,可以确保应用程序的稳定性、安全性和用户友好性。同时,还可以考虑进一步优化应用程序的功能和性能,提升用户体验。

相关文章:

如何使用C#与SQL Server数据库进行交互

一.创建数据库 用VS 创建数据库的步骤: 1.打开vs,创建一个新项目,分别在搜素框中选择C#、Windows、桌面,然后选择Windows窗体应用(.NET Framework) 2.打开“视图-服务器资源管理器”,右键单击“数据连接”&#xff0…...

#渗透测试#红蓝对抗#SRC漏洞挖掘# Yakit(5)进阶模式-MITM中间人代理与劫持(上)

免责声明 本教程仅为合法的教学目的而准备,严禁用于任何形式的违法犯罪活动及其他商业行为,在使用本教程前,您应确保该行为符合当地的法律法规,继续阅读即表示您需自行承担所有操作的后果,如有异议,请立即停…...

vue3 项目搭建-9-通过 router 在跳转页面时传参

第一步&#xff0c;在跳转链接处挂载方法&#xff0c;将要传输的数据传入&#xff1a; <a href"#" click.prevent"goToArticle(obj.id)" class"click"><h1>{{obj.title}}</h1><p>作者&#xff1a;{{obj.author}}</p&…...

Java、python标识符命名规范

Java 包名所有字母一律小写。例如cn.com.test类名和接口名每个单词的首字母都要大写。例如ArrayList、Iterator常量名所有字母都大写&#xff0c;单词之间用下划线连接&#xff0c;例如&#xff1a;DAY_OF_MONTH变量名和方法名的第一个单词首字母小写&#xff0c;从第二个单词…...

高效职场人

文章目录 1.时间效能 ABCD2.高效员工的习惯之 自我掌控的秘诀3.学会做主4.学会互赢5.学会沟通、学会聆听6.学会可持续发展&#xff1a;四个方面更新自我(1)更新身体(2)更新精神(3)更新智力(4)更新人际情感 1.时间效能 ABCD 时间四象限&#xff1a; A类任务&#xff1a;重要且紧…...

深入探索现代 IT 技术:从云计算到人工智能的全面解析

目录 1. 云计算&#xff1a;重塑 IT 基础设施 2. 大数据&#xff1a;挖掘信息的价值 3. 物联网&#xff08;IoT&#xff09;&#xff1a;连接物理世界 4. 区块链&#xff1a;重塑信任机制 5. 人工智能&#xff08;AI&#xff09;&#xff1a;智能未来的驱动力 结语 在当今…...

【AI学习】苹果技术报告《Apple Intelligence Foundation Language Models》

文章地址&#xff1a;https://machinelearning.apple.com/papers/apple_intelligence_foundation_language_models.pdf 这篇文章介绍了苹果公司开发的基础语言模型&#xff08;Apple Foundation Language Models&#xff0c;简称AFM&#xff09;&#xff0c;这些模型旨在为苹果…...

深度相机获取实时图像总结

问题详情&#xff1a;之前一直把曝光调整到50000&#xff0c;画面一直很流畅&#xff0c;知道领导要求将曝光改成500000时整个程序卡死了 问题解决&#xff1a; 首先怀疑是帧率太低的原因&#xff0c;控制变量后发现不是帧率的问题&#xff0c;看着代码很迷茫&#xff0c;领导…...

Nginx限流实践-limit_req和limit_conn的使用说明

注意&#xff1a; 本文内容于 2024-12-07 19:38:40 创建&#xff0c;可能不会在此平台上进行更新。如果您希望查看最新版本或更多相关内容&#xff0c;请访问原文地址&#xff1a;Nginx限流实践。感谢您的关注与支持&#xff01; 一、限流 之前我有记录通过CentOS7定时任务实…...

Unity在运行状态下,当物体Mesh网格发生变化时,如何让MeshCollider碰撞体也随之实时同步变化?

旧版源代码地址&#xff1a;https://download.csdn.net/download/qq_41603955/90087225?spm1001.2014.3001.5501 旧版效果展示&#xff1a; 新版加上MeshCollider后的效果&#xff1a; 注意&#xff1a;在Unity中&#xff0c;当你动态地更改物体的Mesh时&#xff0c;通常期望…...

记一次由docker容器使得服务器cpu占满密码和密钥无法访问bug

Bug场景&#xff1a; 前几天在服务器上部署了一个免费影视网站&#xff0c;这个应用需要四个容器&#xff0c;同时之前的建站软件workpress也是使用docker部署的&#xff0c;也使用了三个容器。在使用workpress之前&#xff0c;我将影视软件的容器全部停止。 再使用workpress…...

前端TS基础

文章目录 一、类型1、定义类型2、any、unknown、never3、基础类型4、联合类型5、交叉类型6、type、typeof7、作用域 二、数据结构1、数组2、元组3、函数类型4、对象类型 三、接口四、泛型五、enum六、断言七、工具1、模块2、namespace3、装饰器4、declare5、运算符6、映射类型7…...

前端面经每日一题day06

Cookie有什么字段 Name&#xff1a;cookie的唯一标识符 Value&#xff1a;与Name对应&#xff0c;存储Cookie的信息 Domain&#xff1a;可以访问cookie的域名 Path&#xff1a;可以访问cookie的路径 Expires/Max-Age&#xff1a;超时时间 Size&#xff1a;cookie大小 Ht…...

SOC,SOH含义区别及计算公式

SOC&#xff0c;SOH含义区别及计算公式 两者结合使用&#xff0c;有助于实现更精确的电池管理&#xff0c;延长电池的使用寿命&#xff0c;并确保电池的高效、安全运行。 1. SOC&#xff08;State of Charge&#xff0c;荷电状态&#xff09;2. SOH&#xff08;State of Health…...

阿里云轻量应用服务器开放端口,图文教程分享

阿里云轻量应用服务器如何开放端口&#xff1f;在轻量服务器管理控制台的防火墙中添加规则即可开通端口&#xff0c;开通80端口就填80&#xff0c;开通443就填443端口&#xff0c;开通3306端口就填3306。阿里云百科网aliyunbaike.com整理阿里云轻量应用服务器端口号开通图文教程…...

嵌入式里的“移植”概念

这里因为最近一年看到公司某项目很多代码上有直接硬件的操作&#xff0c;这里有感而发&#xff0c;介绍移植的概念。 一、硬件 先上一个图&#xff1a; 举个例子&#xff0c;大学里应该都买过开发板&#xff0c;例如st的&#xff0c;这里三个层次&#xff0c; 内核&#xff…...

深入探讨 AF_PACKET 套接字

AF_PACKET 套接字是一种用于直接访问网络接口(即网卡)的套接字类型&#xff0c;通常用于网络数据包捕获和分析。它允许应用程序直接与网络接口卡&#xff08;NIC&#xff09;交互&#xff0c;而不需要通过网络协议栈。从而可以发送和接收以太网帧。它提供了比普通TCP/UDP套接字…...

Redis的哨兵机制

目录 1. 文章前言2. 基本概念2.1 主从复制的问题2.2 人工恢复主节点故障2.3 哨兵机制自动恢复主节点故障 3. 安装部署哨兵&#xff08;基于docker&#xff09;3.1 安装docker3.2 编排redis主从节点3.3 编排redis-sentinel节点 4. 重新选举5. 选举原理6. 总结 1. 文章前言 &…...

CSS系列(1)-- 选择器体系详解

前端技术探索系列&#xff1a;CSS 选择器体系详解 &#x1f3af; 致读者&#xff1a;探索 CSS 选择器的奥秘 &#x1f44b; 前端开发者们&#xff0c; 今天我们将深入探讨 CSS 选择器体系&#xff0c;这是构建优雅样式表的基础。让我们一起学习如何精确地选中并控制网页中的…...

用Python开发打字速度测试小游戏

本文将带你一步步开发一个简单的打字速度测试小游戏,通过随机生成词组并计算用户输入速度,帮助提升打字技能。 一、功能描述 随机生成一段句子,用户需要尽快输入。计时功能,统计用户输入的总时长。对比正确率和速度,给出评分反馈。二、开发环境 语言:Python依赖库:pygam…...

Python AI用例生成效率提升300%:从零搭建可复用的Prompt工程流水线

第一章&#xff1a;Python AI用例生成效率提升300%&#xff1a;从零搭建可复用的Prompt工程流水线在AI应用开发中&#xff0c;重复编写、调试和验证Prompt严重拖慢用例迭代速度。本章介绍一种基于Python的轻量级Prompt工程流水线&#xff0c;通过模板化、版本化与自动化执行三重…...

终极AI图像增强神器Upscayl:让每一张照片重获新生

终极AI图像增强神器Upscayl&#xff1a;让每一张照片重获新生 【免费下载链接】upscayl &#x1f199; Upscayl - Free and Open Source AI Image Upscaler for Linux, MacOS and Windows built with Linux-First philosophy. 项目地址: https://gitcode.com/GitHub_Trending…...

革命性智能求职助手:AI驱动的多平台简历投递解决方案

革命性智能求职助手&#xff1a;AI驱动的多平台简历投递解决方案 【免费下载链接】get_jobs &#x1f4bc;【找工作最强助手】全平台自动投简历脚本&#xff1a;(boss、前程无忧、猎聘、拉勾、智联招聘) 项目地址: https://gitcode.com/gh_mirrors/ge/get_jobs 你是否还…...

万字长文 解析串口通信

一.目标 处理器与外部设备通信的两种方式 单工只允许一个方向 半双工就像对讲机 全双工就像打电话 按照有无时钟同步 分为 1帧等于1个起始位 加上数据位 加上效验位 停止位 波特率是一秒传输的字节数 起始位(Start Bit): 起始位是数据帧的同步标志位,固定为低电平(…...

小样本学习:OpenClaw+nanobot镜像快速领域适配方案

小样本学习&#xff1a;OpenClawnanobot镜像快速领域适配方案 1. 为什么需要小样本领域适配 作为一名长期关注AI落地的开发者&#xff0c;我经常遇到这样的困境&#xff1a;通用大模型在垂直领域表现不佳&#xff0c;而从头训练专业模型又需要海量标注数据。直到发现OpenClaw…...

Python异步爬虫实战:aiohttp并发采集与验证码异步处理完整教程

前言 爬虫效率是每个数据工程师都关心的问题。当你需要采集上万个页面时&#xff0c;同步请求一个一个排队等待的方式实在太慢了。 Python的asyncio aiohttp组合可以让你的爬虫速度提升10-50倍&#xff0c;而且代码改动并不大。 本文将从零开始讲解异步爬虫的原理和实战&am…...

如何用G-Helper智能恢复ROG笔记本色彩显示:终极解决方案

如何用G-Helper智能恢复ROG笔记本色彩显示&#xff1a;终极解决方案 【免费下载链接】g-helper Lightweight Armoury Crate alternative for Asus laptops. Control tool for ROG Zephyrus G14, G15, G16, M16, Flow X13, Flow X16, TUF, Strix, Scar and other models 项目地…...

摆脱论文困扰!高效论文写作全流程AI论文平台推荐(2026 最新)

论文写作全流程可拆解为文献调研→选题/开题→大纲/初稿→文献综述→降重/去AI味→润色/格式→查重/投稿七大环节&#xff0c;2026年AI论文平台按环节精准匹配&#xff0c;兼顾中文适配、降重能力、去AI痕迹、学术合规四大核心需求&#xff0c;覆盖免费/付费、通用/垂直场景。一…...

告别繁琐的pip安装,用快马平台快速搭建python数据分析原型

最近在做一个数据分析的小项目时&#xff0c;我深刻体会到了Python环境配置的繁琐。每次换电脑或者重装系统&#xff0c;都要重新安装Python、配置pip、解决各种依赖冲突&#xff0c;光是环境准备就能耗掉半天时间。特别是当需要快速验证一个想法时&#xff0c;这种等待简直让人…...

效率提升利器:用快马生成智能脚本,一键统一团队node.js开发环境

在团队协作开发中&#xff0c;最让人头疼的莫过于"在我电脑上能跑"的环境问题。最近我们团队尝试用InsCode(快马)平台生成智能脚本&#xff0c;彻底解决了Node.js环境配置这个老大难问题。分享下这个提升效率的实践过程&#xff1a; 环境检测自动化 传统方式需要每个…...