C#ADO.NET数据库操作

C#ADO.NET数据库操作

  • 数据库连接
    • 功能描述
    • Connection类
      • 属性方法
    • 实现流程
    • 代码演示
  • 数据库操作
    • 类介绍
      • Command类
        • 功能描述
        • 构造方法
        • 属性方法
        • 实现流程
      • DataReader类
        • 功能描述
        • 构造方法
        • 属性方法
        • 实现流程
      • DataAdapter类
        • 功能描述
        • 构造方法
        • 属性方法
        • 实现流程
      • DataSet类
        • 功能描述
        • 构造方法
        • 属性方法
        • 实现流程
      • DataTable
        • 功能描述
        • 构造方法
        • 属性方法
        • 实现流程
      • DataRow类
        • 功能描述
        • 构造方法/实例方法
        • 属性方法
        • 实现流程
      • DataColumn类
        • 功能描述
        • 构造方法
        • 属性方法
        • 实现流程
  • 思维导图总结
  • 程序Demo

C#语言中通过ADO.NET组件实现数据库链接以及操作数据库的功能。ADO.NET则通过调用对应的类实现这些功能。包括:Connection、Command、DataReader、DataSet等。本文就对这些类的功能详细介绍。另外在调用这些类时,需要在 System.Data.SqlClient 命名空间下操作。

数据库连接

功能描述

使用Connection类实现此功能,实现数据库的连接、断开以及当前数据库连接状态。可定义数据库连接串连接任意数据库。例如 SQLServer、Oracle、MySQL 等。

Connection类

属性方法

属性或方法 说明
SqlConnection() 无参构造方法
SqlConnection(string connectionstring) 带参数的构造方法,数据库连接字符串作为参数
Connectionstring 属性,获取或设置数据库的连接串
State 属性,获取当前数据库的状态,由枚举类型 Connectionstate 为其提供值
ConnectionTimeout 属性,获取在尝试连接时终止尝试并生成错误之前所等待的时间
DataSource 属性,获取要连接的 SQL Server 的实例名
Open() 方法,打开一个数据库连接
Close() 方法,关闭数据库连接
BeginTransaction() 方法,开始一个数据库事务

实现流程

  1. 编写连接字符串。语法格式如下:
    Data Source = 服务器名称 \ 数据库实例名 ; Initial Catalog = 数据库名称 ; User ID = 用户名 ; Password = 密码

    其中如果使用 Windows 身份验证的方式登录数据库时,则不需要输入登录用户和密码。但考虑到数据库安全性,不建议。其语法格式如下:Data Source = 服务器名称 \ 数据库实例名 ; Initial Catalog = 数据库名称 ; Integrate Security = True

属性或方法 说明
Data Source 用于指定要访问数据库的数据库实例名,服务器名称可以换成 IP 地址或者数据库所在的计算机名称
Initial Catalog 要访问数据库实例下的数据库名
User ID 登录到指定 SQL Server 数据库实例的用户,比如sa
Password 与 登录用户对应的密码

C#ADO.NET数据库操作_第1张图片
C#ADO.NET数据库操作_第2张图片

2.创建SQLConnection类实例

语法格式:SqlConnection 连接对象名 = new SqlConnection( 数据库连接串 );

多嘴说一句,C#为面向对象编程,类在C#为抽象体,是对某种实物的抽象化,但在使用时,需要对某个具体的对象进行编程,因此需要对类进行实例化。举个例子,比如汽车可以理解为类,但如果我要对我的汽车进行操作。需要调用汽车这个类,然后实例化出我的汽车,才能对我的汽车进行相关操作。

3.打开数据库

语法格式如下:连接对象名.Open();

创建 SqlConnection 连接类的实例后并没有连接上数据库,需要使用连接类的 Open 方法打开数据库的连接。

在使用 Open 方法打开数据库连接时,可通过Connection属性方法中State来判断状态。

状态 返回值 描述
Closed 0 连接已关闭。
Connecting 2 连接对象正在连接到数据源。
Open 1 连接已打开。

4.数据库操作

和数据库链接后,可以对数据库进行操作,包括数据查询、修改等。

5.数据库关闭

语法格式:连接对象名.Close(); 在完成数据库的操作后,为了节省数据库的连接资源,需要关闭数据库连接。

代码演示

//编写数据库连接串
string connStr = "Data source= 服务器名称.;Initial Catalog=数据库名称;User ID=用户名;Pwd=用户密码";
//创建SqlConnection的实例
SqlConnection conn = new SqlConnection(connStr);
//打开数据库连接
conn.Open();
if(conn.State == 1)
{
    MessageBox.Show("数据库连接成功!");
}
else
{
    MessageBox.Show("数据库连接失败!");
}

#region DataOpera
    //数据库操作代码
#endregion

conn.Close();//关闭数据库

数据库操作

数据库操作包括数据的查询、修改(增减删改)、读取。用到的类包括Command、DataReader、DataSet、DataTable等

用的的类包括Command类、DataReader类、DataSet类、DataTable类。通过调用每个类的属性方法完成以上操作。

在进行数据库的操作时,需要先通过Connection连接数据库。

类介绍

Command类

功能描述

对数据库对象的操作,包括对数据表以及对数据库、视图、存储过程等数据库对象的操作

Command类 在 System.Data.SqlClient 命名空间下对应的类名是 SqlCommand。

构造方法

构造方法 说明
SqlCommand() 无参构造方法
SqlCommand(string commandText,SqlConnection conn) 带参的构造方法,第 1 个参数是要执行的 SQL 语句,第 2 个参数是数据库的连接对象

属性方法

属性或方法 说明
CommandText 属性,Command 对象中要执行的 SQL 语句
Connection 属性,获取或设置数据库的连接对象
CommandType 属性,获取或设置命令类型
Parameters 属性,设置 Command 对象中 SQL 语句的参数
ExecuteReader() 方法,获取执行查询语句的结果,返回满足条件的所有查询结果
ExecuteScalar() 方法,返回查询结果中第 1 行第 1 列的值,主要是返回某一数值
ExecuteNonQuery() 方法,执行对数据表的增加、删除、修改操作

ExecuteScalar

如果影响行数为0的话,则证明操作是不成功的,大于0则证明操作成功。

返回数值规则返回第一列,第一行的数据。比如查询行数
如果第一列第一行不为空,那么ExecuteScalar就直接对应的DotNet的值。
如果有第一行,但是第一列为空,那么返回的是 DBNull 。
如果一行都没有,那么ExecuteScalar就返回null

返回值的数据类型是object,需要尽管转换为Int或String

ExecuteNonQuery

  1. 对于Update、insert、Delete语句执行成功是返回值为该命令所影响的行数,如果影响的行数是0,则返回值就是0;

  2. 对于所有其他类型的语句,返回值为-1;

  3. 如果发生回滚,返回值也为-1;

如果执行异常,会返回报错信息

实现流程

1.创建Command类实例,语法格式如下:

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

2.编写SQL语句。

可参考SQL语句的编写规则,SQL语句命令主要分查询型和非查询型。

3.执行对数据表的操作。

数据表操作主要分两种:1数据查询 (a返回某一数值,比如查询某一行数b返回符合查询条件的所有结果)2.数据的操作(增减删改)

1.a 返回某一数值,比如查询某用户名是否已存在数据库中。语法类型为:

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

对应返回值可参考上文ExecuteScalar的属性介绍。再通过返回值进行逻辑判断

1.b 返回符合查询条件的所有查询结果,比如查询数学成绩大于60的同学用户名。语法类型:

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

实例化对象后,调用实例名,读取需要的数据。

这里需要调用DataReader类读取查询结果。并且只能以只读方式读取的(即不能修改 DataReader 中存放的数据)

2.数据的操作。比如某一数据的插入、修改、删除等。语法类型:

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

对应返回值可参考上文ExecuteNonQuery的属性介绍。再根据返回值进行逻辑判断

DataReader类

功能描述

用于读取表中的查询结果,并且是以只读方式读取的(即不能修改 DataReader 中存放的数据)。

具有访问数据的速度比较快,占用的服务器资源比较少特点。

当查询结果仅为一条时,可以使用 if 语句查询 DataReader 对象中的数据,

如果返回值是多条数据,需要通过 while 语句遍历 DataReader 对象中的数据。

DataReader 在 System.Data.SqlClient 命名空间下对应的类名是 SqlDataReader。

构造方法

属性方法

属性或方法 说明
FieldCount 属性,获取当前行中的列数
HasRows 属性,获取 DataReader 中是否包含数据
IsClosed 属性,获取 DataReader 的状态是否为已经被关闭
Read 方法,让 DataReader 对象前进到下一条记录
Close 方法,关闭 DataReader 对象
Get XXX (int i) 方法,获取指定列的值,其中XXX代表的是数据类型。例如获取当前行第1列 double 类型的值,获取方法为GetDouble(o)

实现流程

  1. 实例化DataReader类,并用实例化后的实例调用Comm类的ExecuteReader方法,语法结构如下:

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

2.遍历 SqlDataReader 中的结果。语法结构如下:

while(SqlDataReader类的实例名.Read())

{

//数据读取

}

SqlDataReader 类中提供的 Read 方法用于判断其是否有值,并指向 SqlDataReader 结果中的下一条记录。

如果返回值为 True,则可以读取该条记录,否则无法读取。在读取记录时,要根据查询结果表中的数据类型来读取表中相应的列。

3.关闭 SqlDataReader。语法结构如下:

SqlDataReader类的实例名.Close();

DataAdapter类

功能描述

将数据表中的数据查询出来并添加到 DataSet 中,然后在DataSet类或DataTab类中对查询的数据进行修改操作。这也是区别DataReader类。DataAdapter 在 System.Data.SqlClient 命名空间下对应的类名是 SqlDataAdapter。

构造方法

构造方法 说明
SqlDataAdapter(SqlCommand cmd) 带参数的构造方法,传递 SqlCommand 类的对象作为参数
SqlDataAdapter(string sql, SqlConnection conn) 带参数的构造方法,sql 参数是指定对数据表执行的 SQL 语句,conn 是数据库的连接对象
SqlDataAdapter() 不带参数的构造方法

属性方法

属性或方法 说明
SelectCommand 属性,设置 SqlDataAdapter 中要执行的查询语句
InsertCommand 属性,设置 SqlDataAdapter 中要执行的添加语句
UpdateCommand 属性,设置 SqlDataAdapter 中要执行的修改语句
DeleteCommand 属性,设置 SqlDataAdapter 中要执行的删除语句
Fill(DataSet ds) 方法,将 SqlDataAdapter 类中查询出的结果填充到 DataSet 对象中
Fill(DataTable dt) 方法,将 SqlDataAdapter 类中查询出的结果填充到 DataTable 对象 中,DataTable是数据表对象,在一个DataSet对象中由多个 DataTable对象构成
Update(DataSet ds) 方法,更新 DataSet 对象中的数据
Update(DataTable dt) 方法,更新 DataTable 对象中的数据

实现流程

DataAdapter需要和DataSet/DataTable一起使用。

1.创建DataAdapter类实例化。语法规则如下

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

2.创建DataSet类实例化,语法规则如下:

DataSet DataSet类的实例名 = new DataSet();

3.将SQLDataAdapter 类对象查询结果填充到Dataset对象中

SqlDataAdapter 类的实例名 .Fill(DataSet类的实例名);

DataSet类

功能描述

类似数据库结构的数据集,每个 DataSet 都是由多个 DataTable 构成的,更新 DataSet 中的数据实际上是通过更新 DataTable 来实现的。每个 DataTable 对象都是由行 (DataRow) 和列 (DataColumn) 构成的,其结构关系如下

C#ADO.NET数据库操作_第3张图片

此外,用户还可以通过 DataRelation 类设置数据表之间的关系。

构造方法

构造方法 说明
DataSet() 无参构造方法
DataSet(string DataSetName) 带参数的构造方法,DataSetName 参数用于指定数据集名称

属性方法

属性或方法 说明
Tables 属性,获取 DataSet 中所有数据表的集合,Tables[0] 代表集合中的第一个数据表
CaseSensitive 属性,获取或设置 DataSet 中的字符串是否区分大小写
Relations 属性,获取 DataSet 中包含的关系集合
Clear() 方法,清空 DataSet 中的数据
Copy() 方法,复制 DataSet 中的数据
AcceptChanges() 方法,更新 DataSet 中的数据
HasChanges() 方法,获取 DataSet 中是否有数据发生变化
RejectChanges() 方法,撤销对 DataSet 中数据的更改

实现流程

1.创建DataAdapter类实例化。语法规则如下

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

2.创建DataSet类实例化,语法规则如下:

DataSet DataSet类的实例名 = new DataSet();

3.将SQLDataAdapter 类对象查询结果填充到Dataset对象中

SqlDataAdapter 类的实例名 .Fill(DataSet类的实例名);

DataTable

功能描述

DataTable 作为 DataSet 中的重要对象,其与数据表的定义是类似的,都是由行和列构成,并有唯一的表名。

中可以将数据直接填充到 DataTable 中,这样既能节省存储空间也能简化查找数据表中的数据。

构造方法

构造方法 说明
DataTable() 无参构造方法
DataTable(string TableName) 带参数的构造方法, TableName 参数用于指定数据表的名称

属性方法

属性 说明
TableName 属性,获取或设置 DataTable 的名称
Columns 属性,获取 DataTable 中列的集合
Rows 属性,获取 DataTable 中行的集合
DataSet 属性,获取 DataTable 所在的 DataSet
Constraints 属性,获取 DataTable 中的所有约束

大部分方法和DataSet类一样,上面的为DataTable类独有的。

实现流程

1.创建DataAdapter类实例化。语法规则如下

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

2.创建DataTable类实例化,语法规则如下:

DataTable DataTable类的实例名 = new DataTable();

3.将SQLDataAdapter 类对象查询结果填充到DataTable对象中

SqlDataAdapter 类的实例名 .Fill(DataTable类的实例名);

DataRow类

功能描述

代表数据表中的行,并允许通过该类直接对数据表进行添加、修改、删除行的操作

构造方法/实例方法

通过 DataTable 中的 NewRow 方法创建 DataRow 类的对象,语法规则如下

DataTable DataTable的实例名 = new DataTable();
DataRow DataRow的实例名 = DataTable的实例名.NewRow();

属性方法

属性或方法 说明
Table 属性,设置 DataRow 对象所创建 DataTable 的名称
RowState 属性,获取当前行的状态
HasErrors 属性,获取当前行是否存在错误
AcceptChanges() 方法,更新 DataTable 中的值
RejectChanges() 方法,撤销对 DataTable 中的值的更新
Delete() 方法,标记当前的行被删除,并在执行 AcceptChanges 方法后更新数据表

实现流程

1.创建DataTable类的对象和表名。语法规则

private DataTable DataTable的实例名 = new DataTable(“数据表名”);

2.添加DataTable数据表的列,设置列的属性,包括数据类型、名称等。并添加到DataTable数据表中

DataColumn 列名 = new DataColumn(“列名”, typeof(数据类型));

dt.Columns.Add(列名);

3.添加数据,即修改表行的数据。并添加到DataTable数据表中

DataRow dr = dt.NewRow();

dr[“name”] = textBox1.Text;

dt.Rows.Add(dr);

DataColumn类

功能描述

是数据表中的列对象,与数据库中表的列定义一样,都可以为其设置列名以及数据类型

构造方法

构造方法 说明
DataColumn() 无参构造方法
DataColumn(string columnName) 带参数的构造方法,columnName 参数代表的是列名
DataColumn(string columnName,Type dataType) 带参数的构造方法,columnName 参数代表的是列名,dataType 参数代表的是列的数据类型

属性方法

属性 说明
ColumnName 属性,设置 DataColumn 对象的列名
DataType 属性,设置 DataColumn 对象的数据类型
MaxLength 属性,设置 DataColumn 对象值的最大长度
Caption 属性,设置 DataColumn 对象在显示时的列名,类似于给表中的列设置别名
DefaultValue 属性,设置 DataColumn 对象的默认值
AutoIncrement 属性,设置 DataColumn 对象为自动增长列,与 SQL Server 中数据表的标识列类似
AutoIncrementSeed 属性,与 AutoIncrement 属性联用,用于设置自动增长列的初始值
AutoIncrementStep 属性,与 AutoIncrement 属性联用,用于设置自动增长列每次增加的值
Unique 属性,设置 DataColumn 对象的值是唯一的,类似于数据表的唯一约束
AllowDBNull 属性,设置 DataColumn 对象的值是否允许为空

实现流程

1.创建DataTable类的对象和表名。语法规则

private DataTable DataTable的实例名 = new DataTable(“数据表名”);

2.添加DataTable数据表的列,设置列的属性,包括数据类型、名称等。并添加到DataTable数据表中

DataColumn 列名 = new DataColumn(“列名”, typeof(数据类型));

dt.Columns.Add(列名);

3.添加数据,即修改表行的数据。并添加到DataTable数据表中

DataRow dr = dt.NewRow();

dr[“name”] = textBox1.Text;

dt.Rows.Add(dr);

思维导图总结

C#ADO.NET数据库操作_第4张图片

程序Demo

CSDN
Github

你可能感兴趣的:(C#,C#,ADO.NET,数据库操作,数据库连接)