• 用C#通过sql语句操作Sqlserver数据库教程


    目录

    必要准备

    SQL语句编写加执行

    编写

    执行

    创建执行器

    ExecuteNonQuery()方式执行

     ExecuteScalar()方式执行

    二者区别 

     ExecuteReader()方式执行

    实例:

    1-创建一张数据表

    ​编辑

    2-向表中插入数据

    3-修改表中数据 

    4-删除表中数据

    5-读取表中数据


    必要准备

    你得有一个sqlserver数据库,并且要和vs项目连接。

    关于VS连接sqlserver数据库的教程前几天发过了,链接如下

    VS2022连接sqlserver数据库教程_予我心安A3的博客-CSDN博客_vs如何连接数据库sqlserver

     调用用于访问和控制数据库的程序集。还得确保你真的安装了这个程序集

    using System.Data.SqlClient;

     安装好如下才对

    填写连接参数字符串

    无账号密码的数据库服务器(windows用户认证)这样写即可

    1. string connStr = "Data Source=LAPTOP-82MUPKTO;Initial Catalog=CSDN予我心安A3的数据库;Integrated Security=True";
    2. //LAPTOP-82MUPKTO 连接的数据库服务器名
    3. //CSDN予我心安A3的数据库 连接的数据库名

    有账号密码登录的数据库服务器(sqlserver身份认证)这样写

     string connStr = "Data Source=服务器名;Initial Catalog=数据库名;User ID = 账号;Password=密码";

    将连接参数字符串传入数据库链接类,生成链接对象conn

    1. SqlConnection conn = new SqlConnection(connStr);
    2. //SqlConnection 变量名 = new SqlConnection(参数字符串或存储了参数字符串的变量);

    进行链接的测试,运行不报错即链接成功

    1. conn.Open();//打开数据库链接,越晚开越好
    2. 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

    1. string tablename="csdn予我心安的数据表1";//我是表名
    2. string sql = String.Format("create table {0}(name varchar(8) not null)", tablename);
    3. //tablename的内容会替换掉字符串中的{0},所以sql的内容会随着tablename变换而改变

    执行

    创建执行器

    sql语句我们已经写好了,接下了就要执行了

    我们调用SqlCommand类生成一个sql语句执行器cmd,传入sql语句和链接变量

    1. SqlCommand cmd = new SqlCommand(sql, conn);
    2. //格式: SqlCommand 自定义执行器变量名= new SqlCommand(sql字符串变量, 链接变量);

    执行器我们创建好了,接下来要选择执行方法,不同的执行方法有不同的返回值。

    特别提醒:使用前记得打开链接

    conn.Open();

    ExecuteNonQuery()方式执行

    cmd.ExecuteNonQuery();

     ExecuteScalar()方式执行

    cmd.ExecuteScalar();

    二者区别 

     ExecuteReader()方式执行

    cmd.ExecuteReader();

    这个执行方式的作用我会在下面的实例中详细讲解

    特别提醒:执行完请关闭连接

     conn.Close();

    实例:

    1-创建一张数据表

    为小明创建一张个人成绩表

    要用到sql语句中创建数据表的指令

    1. create table 表名
    2. (
    3. 列名 数据类型 是否允许为空(null||not null),
    4. 列名2 数据类型 是否允许为空(null||not null),
    5. 列名3 数据类型 是否允许为空(null||not null),
    6. ……
    7. 列名n 数据类型 是否允许为空(null||not null)
    8. )

    C#代码 

    1. using System.Data.SqlClient;//头别忘了,如果加了头还显示未调用,请检查Nuget包
    2. public static void addtable(string tablename)
    3. {
    4. //测试连接数据库
    5. string connStr = "Data Source=LAPTOP-82MUPKTO;Initial Catalog=CSDN予我心安A3的数据库;Integrated Security=True";
    6. SqlConnection conn = new SqlConnection(connStr);
    7. //打开数据库
    8. conn.Open();
    9. //编写sql语句,语法即sql语法
    10. string sql = String.Format("create table {0}(课程名 varchar(11) not null,成绩 tinyint not null)", tablename);
    11. SqlCommand cmd = new SqlCommand(sql, conn);
    12. //贴心,异常处理都安排上了
    13. try
    14. {
    15. cmd.ExecuteNonQuery();
    16. Console.WriteLine("数据表创建成功");
    17. }
    18. catch (SqlException ae)
    19. {
    20. Console.WriteLine("数据表创建失败");
    21. Console.WriteLine(ae.Message);
    22. }
    23. finally
    24. {
    25. conn.Close();//对数据库操作完成后,需要关闭数据库,释放内存
    26. }
    27. }
    28. addtable("考试成绩表")

    芜湖起飞 

    2-向表中插入数据

    小明的计算机科学考试考了100分,帮他录进去

    要用到sql中的插入数据指令

    1. insert into 表名
    2. values
    3. ('数据1','数据2','数据3')//第一行数据,表结构有几列就几个呗,允许为空的地方可以就打''
    4. ('数据1','数据2','数据3')//第二行数据,表结构有几列就几个呗,允许为空的地方可以就打''
    1. public static void adddata(string classname,int grade)
    2. {
    3. //测试连接数据库
    4. string connStr = "Data Source=LAPTOP-82MUPKTO;Initial Catalog=CSDN予我心安A3的数据库;Integrated Security=True";
    5. SqlConnection conn = new SqlConnection(connStr);
    6. //打开数据库
    7. conn.Open();
    8. //编写sql语句,语法即sql语法
    9. string sql = String.Format("insert into 考试成绩表 values('{0}','{1}')",classname,grade);
    10. SqlCommand cmd = new SqlCommand(sql, conn);
    11. try
    12. {
    13. cmd.ExecuteNonQuery();
    14. Console.WriteLine("成绩录入成功");
    15. }
    16. catch (SqlException ae)
    17. {
    18. Console.WriteLine("成绩录入失败");
    19. Console.WriteLine(ae.Message);
    20. }
    21. finally
    22. {
    23. conn.Close();//对数据库操作完成后,需要关闭数据库,释放内存
    24. }
    25. }
    26. data_Control.adddata("计算机科学",100);

    3-修改表中数据 

    我去,小明考试作弊被发现,成绩0分,帮他改过来

    1. update 表名
    2. set 列名1='值',列名2='值' where 筛选条件
    1. public static void changedata(string classname,int new_grade)
    2. {
    3. //测试连接数据库
    4. string connStr = "Data Source=LAPTOP-82MUPKTO;Initial Catalog=CSDN予我心安A3的数据库;Integrated Security=True";
    5. SqlConnection conn = new SqlConnection(connStr);
    6. //打开数据库
    7. conn.Open();
    8. //编写sql语句,语法即sql语法
    9. string sql = String.Format("update 考试成绩表 set 成绩='{0}' where 课程名='{1}'", new_grade,classname);
    10. SqlCommand cmd = new SqlCommand(sql, conn);
    11. try
    12. {
    13. cmd.ExecuteNonQuery();
    14. Console.WriteLine("成绩修改成功");
    15. }
    16. catch (SqlException ae)
    17. {
    18. Console.WriteLine("成绩修改失败");
    19. Console.WriteLine(ae.Message);
    20. }
    21. finally
    22. {
    23. conn.Close();//对数据库操作完成后,需要关闭数据库,释放内存
    24. }
    25. }
    26. changedata("计算机科学",0);

    4-删除表中数据

    小明害怕被老爸竹笋炒肉丝,给我1包辣条贿赂我删掉这条记录,我肯定不会为了一包辣条就帮他

    ,但他拿了2包就是另一回事了。

    delete from 表名 where 筛选条件
    1. public static void delete_data(string classname)
    2. {
    3. //测试连接数据库
    4. string connStr = "Data Source=LAPTOP-82MUPKTO;Initial Catalog=CSDN予我心安A3的数据库;Integrated Security=True";
    5. SqlConnection conn = new SqlConnection(connStr);
    6. //打开数据库
    7. conn.Open();
    8. //编写sql语句,语法即sql语法
    9. string sql = String.Format("delete from 考试成绩表 where 课程名='{0}'", classname);
    10. SqlCommand cmd = new SqlCommand(sql, conn);
    11. try
    12. {
    13. cmd.ExecuteNonQuery();
    14. Console.WriteLine("成绩删除成功");
    15. }
    16. catch (SqlException ae)
    17. {
    18. Console.WriteLine("成绩删除失败");
    19. Console.WriteLine(ae.Message);
    20. }
    21. finally
    22. {
    23. conn.Close();//对数据库操作完成后,需要关闭数据库,释放内存
    24. }
    25. }
    26. delete_data("计算机科学");

     

    小明开心的回家了,他一走我又把成绩写回去了……

    5-读取表中数据

    学校要把小明的成绩单打印出来。

     ExecuteReader()的用法来了啊,谢谢你看到这里。

    用法就在下面的代码中啦

    select * from 考试成绩表
    1. public static void get_data()
    2. {
    3. //测试连接数据库
    4. string connStr = "Data Source=LAPTOP-82MUPKTO;Initial Catalog=CSDN予我心安A3的数据库;Integrated Security=True";
    5. SqlConnection conn = new SqlConnection(connStr);
    6. //打开数据库
    7. conn.Open();
    8. //编写sql语句,语法即sql语法
    9. string sql = String.Format("select * from 考试成绩表");
    10. SqlCommand cmd = new SqlCommand(sql, conn);
    11. SqlDataReader rdr = cmd.ExecuteReader();//定义数据读取器rdr获取传回的数据
    12. while (rdr.Read())//每次执行一次Read(),从数据里读取一行数据
    13. {
    14. string classname=rdr["课程名"].ToString();//根据列名,获得该行里的课程名信息,由于rdr["课程名"]返回的是object类型,所以要进行类型转化,下面成绩一样的原理
    15. int grade = Convert.ToInt32(rdr["成绩"]);//根据列名,获得该行里的成绩信息
    16. Console.WriteLine("课程名:{0},成绩:{1}",classname,grade);
    17. }
    18. conn.Close();//读取时要一直保证数据库是打开的
    19. }

     小明伤心的拿着成绩单走了..........

  • 相关阅读:
    用Python剪辑视频?太简单了
    宠物社区风格 商业版(GBK)Discuz模板
    R语言——条形图数据可视化的多种方式
    图片和文字同时居中「In CSS」
    Golang:gin模板渲染base64图片出现#ZgotmplZ
    如何在激烈的市场竞争中实现互联网产品的用户增长和维护?
    ZMQ之异步管家模式
    C++中的static变量
    c语言学习——2——占位符、数据类型、查看占多少字节
    解锁区块链游戏数据解决方案
  • 原文地址:https://blog.csdn.net/yuwoxinanA3/article/details/125443541