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

Posted 予我心安A3

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用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用户认证)这样写即可

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();
if (conn.State == ConnectionState.Open)

    MessageBox.Show("数据库连接成功!");//winform中可以用
    Console.WriteLine("连接成功");//控制台用

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();//读取时要一直保证数据库是打开的

    

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

怎样用sql语句在sqlserver建表 和插入数据~

详细步骤如下:

  1、点击【新建查询】按钮,打开SQL命令编辑框,对数据库表的操作以及维护都可以通过编辑SQL命令实现。

  2、在编辑框内编辑创建数据库表的代码,确认代码无误后,单击【执行】按钮,创建数据表。

  3、创建数据表的源代码如下:

  use test

  go

  if exists(select name from sys.tables where name='Student')

  drop table Student

  go

  create table Student

  (sname nchar(10) primary key,

  sex nchar(2) not null,

  bir datetime

  )

参考技术A create table 表名
(
列名1 类型,
列名2 类型,
列名3 类型,
....
)
插入数据
INSERT INTO 表(列名1, 列名2,...) VALUES (值1, 值2,....)

sqlserver2000 中首先打开查询分析器→连接数据库→选择需要插入表的数据库→执行脚本追问

谢谢~我一直以为那个只能查询呢

参考技术B CREATE TABLE 表名称
(
列名称1 数据类型,
列名称2 数据类型,
列名称3 数据类型,
....
)
插入数据
INSERT INTO table_name (列1, 列2,...) VALUES (值1, 值2,....)追问

具体怎么操作!!
MySql 和Oracle 直接在命令行输入sql语句就可以了
可是sqlserver2000怎么操作???

追答

用查询分析器就可以啊,选择好要建表的数据库,输入创建语句和插入语句就行
查询分析器没用过嘛?

追问

没有用过
就知道那个企业管理器重要
以前一直都是用Mysql和oracel对sqlserver不熟悉~
我试试看,谢谢了~

本回答被提问者采纳
参考技术C sqlserver也有命令行,osql,isql
或者查询分析器追问

谢谢~

以上是关于用C#通过sql语句操作Sqlserver数据库教程的主要内容,如果未能解决你的问题,请参考以下文章

使用Create table语句创建“教师表”用SQL语句写出怎么操作?

C#操作sql查询出的临时表,详细如下:

怎样用sql语句在sqlserver建表 和插入数据~

我用sqlserver写好了一个存储过程 怎么样才能返回出一个搜索语句的结果集给c#

怎么用C#代码创建sql数据库,求赐教

C# sqlserver ExecuteNonQuery()方法详解