如何使用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语句来管理数据库连接,确保在异常情况下正确关闭连接,以避免资源泄漏。
  • 异常处理和错误提示:捕获并处理所有可能的异常,向用户提供友好的错误提示信息,帮助用户理解问题所在并采取相应的措施。

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

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

用户中心项目教程(二)---umi3的使用出现的错误

目录 1.情况的说明 2.遇到的问题 1)第一个问题-关于npx的使用 2)第二个问题--unsupport问题 3)第三个收获--nodejs安装问题 4)第四个收获---nvm下载问题 5)第五个问题--尚未解决的问题 3.个人总结 1.情况的说明…

讲一下ZooKeeper的持久化机制?

大家好,我是锋哥。今天分享关于【讲一下ZooKeeper的持久化机制?】面试题。希望对大家有帮助; 讲一下ZooKeeper的持久化机制? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 ZooKeeper 是一个开源的分布式协调服务&…

【青蛙过河——思维】

题目 图解 代码 #include <bits/stdc.h> using namespace std; const int N 1e510; int n, x; int h[N]; bool check(int mid) {for(int i 1; i mid - 1 < n; i)if(h[i mid - 1] - h[i - 1] < 2 * x) return false;return true; } int main() {cin >> …

港湾周评|万科的多重压力

《港湾商业观察》李镭 成立于1984年&#xff0c;经营了41年之久的行业模范生与明星房企&#xff0c;万科&#xff08;000002.SZ&#xff1b;02202.HK&#xff09;似乎从未遇到过这样的惊天骇浪。 一方面债务承压&#xff0c;2025年是否能妥善解决&#xff0c;又或是终将“暴雷…

搜维尔科技:Xsens人形机器人解决方案的优势

Xsens 致力于推动人形机器人技术的发展&#xff0c;塑造机器人与人类环境无缝融合的未来&#xff0c;通过创新精确和协作&#xff0c;协助生产和服务&#xff0c;改善人类生活和产业。 Xsens通过人形跟随捕捉详细的人体运动数据&#xff0c;使机器人能够学习类人的动作&#x…

LLM - 大模型 ScallingLaws 的 C=6ND 公式推导 教程(1)

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://spike.blog.csdn.net/article/details/145185794 Scaling Laws (缩放法则) 是大模型领域中&#xff0c;用于描述 模型性能(Loss) 与 模型规模N、数据量D、计算资源C 之间关系的经验规律…

数组常见解决方案

数组常见解决方案 1.快慢指针(双指针) 慢指针记录当前位置 快指针寻找下一个符合条件的数 当符合条件时,此数将slow位置的数覆盖,slow指针指向下一个位置. 最后slow的位置就是符合条件的数组的长度. 80. 删除有序数组中的重复项 II - 力扣&#xff08;LeetCode&#xff09; …

智能学习平台系统设计与实现(代码+数据库+LW)

摘 要 传统办法管理信息首先需要花费的时间比较多&#xff0c;其次数据出错率比较高&#xff0c;而且对错误的数据进行更改也比较困难&#xff0c;最后&#xff0c;检索数据费事费力。因此&#xff0c;在计算机上安装智能学习平台系统软件来发挥其高效地信息处理的作用&#…

前端项目搭建和基础配置

这个模块主要是介绍从零开始搭建项目的一些操作&#xff0c;包含一些前端常用的配置&#xff0c;这里只是一部分&#xff0c;会在后续的文章中逐步进行补充和完善 一、创建项目 在项目路径下使用以下命令生成前后端项目 npm create vite输入项目名称&#xff0c;框架选择Vue…

RC2在线加密工具

RC2是由著名密码学家Ron Rivest设计的一种传统对称分组加密算法&#xff0c;它可作为DES算法的建议替代算法。RC2是一种分组加密算法&#xff0c;RC2的密钥长度可变&#xff0c;可以从8字节到128字节&#xff0c;安全性选择更加灵活。 开发调试上&#xff0c;有时候需要进行对…

Qt Desiogn生成的ui文件转化为h文件

1.找到这个工具 2.查找到ui文件以及要转化为的h文件的路径。 3.在1中的工具输入uic /xx/xxx.ui -o /xx/xxx.h即可得到结果。

多元线性回归分析

介绍: 回归分析是一种强大的统计方法&#xff0c;用于研究变量之间的关系&#xff0c;特别是一个或多个自变量与一个因变量之间的定量关系。 总结就是研究X和Y之间的相关性的分析 First:相关性: 相关性不代表因果性, Eg:统计数据表明:游泳死亡人数越高&#xff0c;雪糕卖得…

移动端布局 ---- 学习分享

响应式布局实现方法 主流的实现方案有两种: 通过rem \ vw/vh \ 等单位,实现在不同设备上显示相同比例进而实现适配. 响应式布局,通过媒体查询media 实现一套HTML配合多套CSS实现适配. 在学习移动端适配之前,还需要学习移动端适配原理: 移动端适配原理(Viewport) 了解VSCo…

【大数据2025】Hadoop 万字讲解

文章目录 一、大数据通识大数据诞生背景与基本概念大数据技术定义与特征大数据生态架构概述数据存储数据计算与易用性框架分布式协调服务和任务调度组件数仓架构流处理架构 二、HDFSHDFS 原理总结一、系统架构二、存储机制三、数据写入流程四、心跳机制与集群管理 安全模式&…

彻底讲清楚 单体架构、集群架构、分布式架构及扩展架构

目录 什么是系统架构 单体架构 介绍 示例图 优点 缺点 集群架构 介绍 示意图 优点 缺点 分布式架构 示意图 优点 缺点 生态扩展 介绍 示意图 优点 缺点 扩展&#xff1a;分布式服务解析 纵切拆服务 全链路追踪能力 循环依赖 全链路日志&#xff08;En…

Typora + PowerShell 在终端打开文件

最近在用 Hexo 搭我人生中的第一个博客&#xff0c;Hexo 新建帖子的时候需要在终端用命令hexo n&#xff0c;然后再用 Typora 打开&#xff0c;用鼠标感觉很麻烦&#xff0c;因此直接用终端一键启动了。 发现 Typora 的一个 bug&#x1f41b;&#xff0c;在 YAML 后面写第一个字…

【RAG落地利器】向量数据库Qdrant使用教程

TrustRAG项目地址&#x1f31f;&#xff1a;https://github.com/gomate-community/TrustRAG 可配置的模块化RAG框架 环境依赖 本教程基于docker安装Qdrant数据库&#xff0c;在此之前请先安装docker. Docker - The easiest way to use Qdrant is to run a pre-built Docker i…

设计模式-单例模式

定义 保证一个类仅有一个实例&#xff0c;并提供一个访问它的全局访问点。 类图 类型 饿汉式 线程安全&#xff0c;调用效率高&#xff0c;但是不能延迟加载。 public class HungrySingleton {private static final HungrySingleton instancenew HungrySingleton();private …

初学stm32 --- CAN

目录 CAN介绍 CAN总线拓扑图 CAN总线特点 CAN应用场景 CAN物理层 CAN收发器芯片介绍 CAN协议层 数据帧介绍 CAN位时序介绍 数据同步过程 硬件同步 再同步 CAN总线仲裁 STM32 CAN控制器介绍 CAN控制器模式 CAN控制器模式 CAN控制器框图 发送处理 接收处理 接收过…

OpenHarmony 4.1 SDK11 北向应用开发笔记

目录 声明 1、开启其他应用 2、延时切换页面 3、设置页面切换效果 4、设置背景图片和背景铺满屏幕 5、设置隐藏状态和导航条 6、设置组件大小和对齐方式 7、设置按钮类型改变按钮边框圆角半径 8、常用布局方式 9、布局技巧 声明 本笔记基于OpenHarmony 4.1 SDK11&am…