当前位置:网站首页>用C#通过sql语句操作Sqlserver数据库教程
用C#通过sql语句操作Sqlserver数据库教程
2022-06-26 21:41:00 【予我心安A3】
目录
必要准备
你得有一个sqlserver数据库,并且要和vs项目连接。
关于VS连接sqlserver数据库的教程前几天发过了,链接如下
VS2022连接sqlserver数据库教程_予我心安A3的博客-CSDN博客_vs如何连接数据库sqlserver
调用用于访问和控制数据库的程序集。还得确保你真的安装了这个程序集
using System.Data.SqlClient;
安装好如下才对
填写连接参数字符串
无账号密码的数据库服务器(windows用户认证)这样写即可
string connStr = "Data Source=LAPTOP-82MUPKTO;Initial Catalog=CSDN予我心安A3的数据库;Integrated Security=True";
//LAPTOP-82MUPKTO 连接的数据库服务器名
//CSDN予我心安A3的数据库 连接的数据库名有账号密码登录的数据库服务器(sqlserver身份认证)这样写
string connStr = "Data Source=服务器名;Initial Catalog=数据库名;User ID = 账号;Password=密码";将连接参数字符串传入数据库链接类,生成链接对象conn
SqlConnection conn = new SqlConnection(connStr);
//SqlConnection 变量名 = new SqlConnection(参数字符串或存储了参数字符串的变量);进行链接的测试,运行不报错即链接成功
conn.Open();//打开数据库链接,越晚开越好
conn.Close();//关闭数据库链接,用完就关,别挂着必要准备已经OK了
下面来讲sql语句的编写和执行。
SQL语句编写加执行
编写
我们定义一个string类型的sql变量来存储我们的sql语句,sql语句只需用原本的语法即可,无需做变化。
sqlserver中创建数据表一般是这么写的

这里把他转成一行的,不用管缩进 。
string sql = "create table csdn予我心安的数据表1(name varchar(8) not null)";有人会问,我的sql语句内容要持续变化,但格式基本不变咋办。总不能另写一条吧。其实没那么折腾,用C#的String.Format()生成sql语句字符串就好了.
C#中string.format用法 C#中string.format用法详解(IT技术)
比如说我要创建的数据表名要替换,我们在表名这加个占位符就OK
string tablename="csdn予我心安的数据表1";//我是表名
string sql = String.Format("create table {0}(name varchar(8) not null)", tablename);
//tablename的内容会替换掉字符串中的{0},所以sql的内容会随着tablename变换而改变执行
创建执行器
sql语句我们已经写好了,接下了就要执行了
我们调用SqlCommand类生成一个sql语句执行器cmd,传入sql语句和链接变量
SqlCommand cmd = new SqlCommand(sql, conn);
//格式: SqlCommand 自定义执行器变量名= new SqlCommand(sql字符串变量, 链接变量);执行器我们创建好了,接下来要选择执行方法,不同的执行方法有不同的返回值。
特别提醒:使用前记得打开链接
conn.Open();ExecuteNonQuery()方式执行
cmd.ExecuteNonQuery();ExecuteScalar()方式执行
cmd.ExecuteScalar();二者区别

ExecuteReader()方式执行
cmd.ExecuteReader();这个执行方式的作用我会在下面的实例中详细讲解
特别提醒:执行完请关闭连接
conn.Close();实例:
1-创建一张数据表
为小明创建一张个人成绩表
要用到sql语句中创建数据表的指令
create table 表名
(
列名 数据类型 是否允许为空(null||not null),
列名2 数据类型 是否允许为空(null||not null),
列名3 数据类型 是否允许为空(null||not null),
……
列名n 数据类型 是否允许为空(null||not null)
)C#代码
using System.Data.SqlClient;//头别忘了,如果加了头还显示未调用,请检查Nuget包
public static void addtable(string tablename)
{
//测试连接数据库
string connStr = "Data Source=LAPTOP-82MUPKTO;Initial Catalog=CSDN予我心安A3的数据库;Integrated Security=True";
SqlConnection conn = new SqlConnection(connStr);
//打开数据库
conn.Open();
//编写sql语句,语法即sql语法
string sql = String.Format("create table {0}(课程名 varchar(11) not null,成绩 tinyint not null)", tablename);
SqlCommand cmd = new SqlCommand(sql, conn);
//贴心,异常处理都安排上了
try
{
cmd.ExecuteNonQuery();
Console.WriteLine("数据表创建成功");
}
catch (SqlException ae)
{
Console.WriteLine("数据表创建失败");
Console.WriteLine(ae.Message);
}
finally
{
conn.Close();//对数据库操作完成后,需要关闭数据库,释放内存
}
}
addtable("考试成绩表")
芜湖起飞
2-向表中插入数据
小明的计算机科学考试考了100分,帮他录进去
要用到sql中的插入数据指令
insert into 表名
values
('数据1','数据2','数据3')//第一行数据,表结构有几列就几个呗,允许为空的地方可以就打''
('数据1','数据2','数据3')//第二行数据,表结构有几列就几个呗,允许为空的地方可以就打'' public static void adddata(string classname,int grade)
{
//测试连接数据库
string connStr = "Data Source=LAPTOP-82MUPKTO;Initial Catalog=CSDN予我心安A3的数据库;Integrated Security=True";
SqlConnection conn = new SqlConnection(connStr);
//打开数据库
conn.Open();
//编写sql语句,语法即sql语法
string sql = String.Format("insert into 考试成绩表 values('{0}','{1}')",classname,grade);
SqlCommand cmd = new SqlCommand(sql, conn);
try
{
cmd.ExecuteNonQuery();
Console.WriteLine("成绩录入成功");
}
catch (SqlException ae)
{
Console.WriteLine("成绩录入失败");
Console.WriteLine(ae.Message);
}
finally
{
conn.Close();//对数据库操作完成后,需要关闭数据库,释放内存
}
}
data_Control.adddata("计算机科学",100);
3-修改表中数据
我去,小明考试作弊被发现,成绩0分,帮他改过来
update 表名
set 列名1='值',列名2='值' where 筛选条件 public static void changedata(string classname,int new_grade)
{
//测试连接数据库
string connStr = "Data Source=LAPTOP-82MUPKTO;Initial Catalog=CSDN予我心安A3的数据库;Integrated Security=True";
SqlConnection conn = new SqlConnection(connStr);
//打开数据库
conn.Open();
//编写sql语句,语法即sql语法
string sql = String.Format("update 考试成绩表 set 成绩='{0}' where 课程名='{1}'", new_grade,classname);
SqlCommand cmd = new SqlCommand(sql, conn);
try
{
cmd.ExecuteNonQuery();
Console.WriteLine("成绩修改成功");
}
catch (SqlException ae)
{
Console.WriteLine("成绩修改失败");
Console.WriteLine(ae.Message);
}
finally
{
conn.Close();//对数据库操作完成后,需要关闭数据库,释放内存
}
}
changedata("计算机科学",0);
4-删除表中数据
小明害怕被老爸竹笋炒肉丝,给我1包辣条贿赂我删掉这条记录,我肯定不会为了一包辣条就帮他
,但他拿了2包就是另一回事了。
delete from 表名 where 筛选条件 public static void delete_data(string classname)
{
//测试连接数据库
string connStr = "Data Source=LAPTOP-82MUPKTO;Initial Catalog=CSDN予我心安A3的数据库;Integrated Security=True";
SqlConnection conn = new SqlConnection(connStr);
//打开数据库
conn.Open();
//编写sql语句,语法即sql语法
string sql = String.Format("delete from 考试成绩表 where 课程名='{0}'", classname);
SqlCommand cmd = new SqlCommand(sql, conn);
try
{
cmd.ExecuteNonQuery();
Console.WriteLine("成绩删除成功");
}
catch (SqlException ae)
{
Console.WriteLine("成绩删除失败");
Console.WriteLine(ae.Message);
}
finally
{
conn.Close();//对数据库操作完成后,需要关闭数据库,释放内存
}
}
delete_data("计算机科学"); 
小明开心的回家了,他一走我又把成绩写回去了……
5-读取表中数据
学校要把小明的成绩单打印出来。
ExecuteReader()的用法来了啊,谢谢你看到这里。
用法就在下面的代码中啦
select * from 考试成绩表 public static void get_data()
{
//测试连接数据库
string connStr = "Data Source=LAPTOP-82MUPKTO;Initial Catalog=CSDN予我心安A3的数据库;Integrated Security=True";
SqlConnection conn = new SqlConnection(connStr);
//打开数据库
conn.Open();
//编写sql语句,语法即sql语法
string sql = String.Format("select * from 考试成绩表");
SqlCommand cmd = new SqlCommand(sql, conn);
SqlDataReader rdr = cmd.ExecuteReader();//定义数据读取器rdr获取传回的数据
while (rdr.Read())//每次执行一次Read(),从数据里读取一行数据
{
string classname=rdr["课程名"].ToString();//根据列名,获得该行里的课程名信息,由于rdr["课程名"]返回的是object类型,所以要进行类型转化,下面成绩一样的原理
int grade = Convert.ToInt32(rdr["成绩"]);//根据列名,获得该行里的成绩信息
Console.WriteLine("课程名:{0},成绩:{1}",classname,grade);
}
conn.Close();//读取时要一直保证数据库是打开的
}

小明伤心的拿着成绩单走了..........
边栏推荐
- 【protobuf 】protobuf 昇級後帶來的一些坑
- Leetcode question brushing: String 06 (implement strstr())
- Flutter 中 ValueNotifier<List<T>> 监听问题解决
- Yolov6: un cadre de détection de cibles rapide et précis est Open Source
- 回首望月
- ICML2022 | Neurotoxin:联邦学习的持久后门
- How SAP Spartacus default routing configuration works
- numpy中mgrid的用法
- VB.net类库(进阶版——1)
- Looking back at the moon
猜你喜欢

leetcode:141. 环形链表【哈希表 + 快慢指针】

Yonghui released the data of Lantern Festival: the sales of Tangyuan increased significantly, and several people's livelihood products increased by more than 150%

Android IO, a first-line Internet manufacturer, is a collection of real questions for senior Android interviews

The postgraduate entrance examination in these areas is crazy! Which area has the largest number of candidates?

线性模型LN、单神经网络SNN、深度神经网络DNN与CNN测试对比

Test comparison of linear model LN, single neural network SNN, deep neural network DNN and CNN
![[serial] shuotou O & M monitoring system 01 overview of monitoring system](/img/b2/bc75a4d0c8d98056d93ba99b3e6193.png)
[serial] shuotou O & M monitoring system 01 overview of monitoring system

Vi/vim editor

【protobuf 】protobuf 昇級後帶來的一些坑

Introduction of classic wide & deep model and implementation of tensorflow 2 code
随机推荐
How to create an OData service with the graphical modeler on the sap BTP platform
Module 5 operation
Chapter 2 construction of self defined corpus
How to analyze financial expenses
PostgreSQL notes
leetcode:152. 乘积最大子数组【考虑两个维度的dp】
大家都能看得懂的源码(一)ahooks 整体架构篇
How SAP Spartacus default routing configuration works
About appium trample pit: encountered internal error running command: error: cannot verify the signature of (solved)
leetcode:710. 黑名单中的随机数【映射思维】
CVPR 2022 | 美团技术团队精选论文解读
2022年,中轻度游戏出海路在何方?
lotus configurations
Android IO, a first-line Internet manufacturer, is a collection of real questions for senior Android interviews
网络连接断开请刷新重试
Leetcode question brushing: String 06 (implement strstr())
花店橱窗布置【动态规划】
亿级月活全民K歌Feed业务在腾讯云MongoDB中的应用及优化实践
「连续学习Continual learning, CL」最新2022研究综述
The importance of using fonts correctly in DataWindow
