当前位置:首页 > Web开发 > 正文

还包括对数据库、视图、存储过程等数据库对象的操作

2024-03-31 Web开发

概述
在 System.Data.SqlClient 定名空间下,对应的 Command 类为 SqlCommand,在创建 SqlCommand 实例前必需已经创建了与数据库的连接。
SqlCommand 类中常用的结构要领如下表所示:

结构要领 说明
SqlCommand()   无参结构要领  
SqlCommand(string commandText,SqlConnection conn)   带参的结构要领,第 1 个参数是要执行的 SQL 语句,第 2 个参数是数据库的连接东西  

对数据库中东西的操纵不只包孕对数据表的操纵,还包孕对数据库、视图、存储过程等数据库东西的操纵,接下来主要介绍的是对数据表和存储过程的操纵。
在对差别数据库东西进行操纵时,SqlCommand 类供给了差此外属性和要领,常用的属性和要领如下表所示:

属性或要领 说明
CommandText   属性,Command 东西中要执行的 SQL 语句  
Connection   属性,获取或设置数据库的连接东西  
CommandType   属性,获取或设置命令类型  
Parameters   属性,设置 Command 东西中 SQL 语句的参数  
ExecuteReader()   要领,获取执行盘问语句的功效  
ExecuteScalar()   要领,返回盘问功效中第 1 行第 1 列的值  
ExecuteNonQuery()   要领,执行对数据表的增加、删除、改削操纵,返回影响的行数  

使用Command类操纵数据库
Command 类中供给了 3 种命令类型,分袂是 Text、TableDirect 以及 StoredProcedure,默认情况下是 Text。
所谓 Text 类型是指使用 SQL 语句的形式,包孕增加、删除、改削以及盘问的SQL语句。
StoredProcedure 用于执行存储过程;TableDirect 仅在 OLE DB 驱动措施中有效。
在使用 Command 类操纵数据库时需要通过以下法式完成。
1) 创建SqlCommand类的实例
创建 SqlCommand 类的实例分两种情况,一种是命令类型为 Text 的,一种是命令类型为 StoredProcedure 的。

命令类型为 Text

SqlCommand SqlCommand 类的实例名 = new SqlCommand( SQL 语句 , 数据库连接类的实例 );

此中:

SQL 语句:指该 SqlCommand 类的实例要执行的 SQL 语句。

数据库连接类的实例:指使用 SqlConnection 类创建的实例,凡是数据库连接类的实例处于打开的状态。

命令类型为 StoredProcedure

SqlCommand SqlCommand 类的实例名 = new SqlCommand( 存储过程名称 , 数据库连接类的实例 );

需要注意的是,存储过程必需是当前数据库实例中的存储过程,并且在挪用带参数的存储过程时,还需要在 SqlCommand 类的实例中添加对应的存储过程参数。
为存储过程添加参数,需要使用 SqlCommand 类实例的 Parameters 属性来设置,具体的代码如下。

SqlCommand 类实例 .Parameters.Add( 参数名 , 参数值 );

2) 执行对数据表的操纵
在执行对数据表的操纵时凡是分为两种情况,一种是执行非盘问 SQL 语句的操纵,即增加、改削、删除的操纵,一种是执行盘问 SQL 语句的操纵。

执行非盘问 SQL 语句的操纵

在执行非盘问 SQL 语句时并不需要返回表中的数据,直接使用 SqlCommand 类的 ExecuteNonQuery 要领即可,该要领的返回值是一个整数,用于返回 SqlCommand 类在执行 SQL 语句后,对表中数据影响的行数。
当该要领的返回值为 -1 时,代表 SQL 语句执行掉败,,当该要领的返回值为 0 时,代表 SQL 语句对当前数据表中的数据没有影响。
例如 要删除学号为 1100 的学生的信息,而表中不存在该学号的学生的信息,SQL语句可以正常执行,但对表中的影响行数是 0。
具体的代码如下:

SqlCommand 类的实例 .ExecuteNonQuery();

需要注意的是,如果执行的 SQL 语句在数据库中执行错误,则会孕育产生异常,因此该部分需要进行异常措置惩罚惩罚。

执行盘问语句的操纵

在执行盘问语句时凡是需要返回盘问功效,SqlCommand 类中供给的 ExecuteReader 要领在执行盘问 SQL 语句后,会返回一个 SqlDataReader 类型的值,通过遍历 SqlDataReader 类中的功效即可得到返回值。
具体的代码如下:

SqlDataReader dr = SqlCommand 类的实例 .ExecuteReader();

别的,如果在执行盘问语句后并不需要返回所有的盘问功效,而仅需要返回一个值,例如盘问表中的记录行数,这时可以使用 ExecuteScalar 要领。具体的代码如下:

int returnvalue = SqlCommand 类的实例 .ExecuteScalar();

下面通过实例来演示 SqlCommand 类的使用:

先创建数据库School,再创建表Student:

CREATE TABLE [dbo].[Student] ( [Id] INT IDENTITY (1, 1) NOT NULL, [Name] VARCHAR (30) NOT NULL, [Age] INT NULL, [EnrollmentDate] DATE NULL, PRIMARY KEY CLUSTERED ([Id] ASC) );

这里如果使用visual studio localdb时,插入中文会呈现乱码,解决要领可以参考这篇文章:

https://blog.csdn.net/xingkongtianyuzhao/article/details/103944280

下面是使用SqlCmd执行插入命令的示例:

温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/web/31729.html