第二周学习笔记(ADO中SqlConnection和SqlCommand的应用)
一. 知识点描述+自编范例
- SqlConnection对象
使用SqlConnection类可以连接到SQL Server数据库。SqlConnection对象的主要属性和方法如下图所示:
属性和方法 |
说明 |
|
属性 |
ConnectionString |
连接字符串 |
方法 |
Open Close |
打开数据库连接 关闭数据库连接 |
连接数据库主要分为以下3步。
(1)定义连接字符串。
我们可以使用集成的Windows身份验证和SQL Server身份验证这两种不同的方式来连接SQL Server数据库。
使用Windows身份验证的数据库连接字符串如下:
Server=(local);Database=ACQDIM;Integrated=sspi;
使用SQL Server身份验证的数据库连接字符串如下:
Server=(local);Database=AddressList;Integrated=false;uid=jsj;[email protected];
(2)创建SqlConnection对象。
可以使用定义好的连接字符串创建SqlConnection对象,代码如下:
SqlConnection sqlconnection=new SqlConnection(connString);
(3)打开数据库。
调用SqlConnection对象的Open()方法打开数据库,代码如下:
sqlconnection.Open();
关闭数据库。
数据库连接使用完毕后,要调用SqlConnection对象的Close()方法显示关闭数据库连接。代码如下:
sqlconnection.Close();
1.1 下面则用一个简单的连接数据库案例来说明SqlConnection对象的应用。
窗口如图所示:
源代码如下:
运行结果如下:
2. SqlCommand对象
SqlCommand对象用于执行具体的SQL语句,如增加、删除、修改、查找。SqlCommand对象的使用步骤如下。
(1)创建SqlConnection对象。
按照上述1. 的方法建立SqlConnection对象。
(2)定义SQL语句。
把所要执行的SQL语句赋给字符串。
(3)创建SqlCommand对象。
我们可以调用SqlCommand类的构造方法创建SqlCommand对象,传入两个参数,即SQL语句和SqlConnection对象,代码如下:
SqlCommand cmd=new SqlCommand(sqlStr,conn);
(4)调用SqlCommand对象的某个方法,执行SQL语句。
注意:在调用SqlCommand对象的某个方法之前,一定要打开数据库连接,否则程序会出错。
下面则是SqlCommand对象的几个重要方法,如下图所示:
方法 |
说明 |
ExecuteScalar |
执行查询,并返回查询结果中第一行第一列的值, 类型是object |
ExecuteNonQuery |
执行SQL语句并返回受影响的行数 |
ExecuteReader |
执行查询命令,返回SqlDataReader对象 |
2.1 下面我们就以实现用户登录功能为例子来说明这SqlCommand对象中的ExecuteScalar和ExecuteReader方法的应用。
2.1.1 调用ExecuteScalar方法实现用户登录功能
源码运行截图如下:
我们可以看到上面的实现用户登录的代码中,我们就是调用了SqlCommand对象的ExecuteScalar方法来判断用户名、密码是否正确的。ExecuteScalar返回的是查询结果的第一行第一列的值,而且类型是object,所以需要进行强制类型转换:
int n =Convert. ToInt32( cmd. Executescalar());
对于得到的结果,如果n等于1,表明用户名和密码正确,登录成功:否则,登录失败。
2.1.2 调用ExecuteScalar方法实现用户登录功能
使用SqlDataReader对象,它可以从数据库中检索只读的数据,它每次从查询结果中读取行到内存中。对于SQL Server数据库,使SqlDataReade对象,其对数据库的读取速度非常快。
SqlDataReade对象的主要属性和方法如下表:
属性和方法 |
说明 |
|
属性 |
HasRows
FieldCount |
指示是否包含查询结果。如果包含查询结果则返回true否则返回false 当前行中的列数 |
方法 |
Read
Close |
前进到下一行记录如果读到记录则返回true,否则返回false 关闭SqIDataReader对象 |
使用SqlDataReader的步骤如下。
(1)创建SqlCommand对象。
Sq1Command cmd = new SqlCommand(sqlStr, conn);
(2)调用SqlCommand对象的ExecuteReader方法创建SqlDataReade对象。
conn.Open() ;
SqlDataReader dr = cmd. ExecuteReader() ;
(3)调用SqlDataReader对 象的Read方法逐行读取数据,如果读到记录就返回true)否则返回false。
dr .Read();
(4)读取当前行中某列的值。
我们可以像数组样,用方括号来读取某列的值,如dr[0].ToString,方括号中的索引号从0开始:也可以通过列名来读取,如
dr["GroupName"].ToStringo,但取出的值是objeet类型,要进行类型转换。
(5)调用Close方法,关闭SqlDataReader。
使用SqlDataReader读取数据的时候会占用数据库连接,必须调用它的Close方法关闭SqlDataReader,才能够用数据库连接进行其他操作。
dr.close();
下面我们改用SqlCommand. SqDataReader对象 来实现用户登录功能。源码运行截图如下:
在上面的代码中,我们通过调用Sq1Command对象的ExecuteReader方法,返回SqlDataReader对象。然后通过SqlDataReader对象的Read方法判断是否包含查到的记录,如果有记录,则Read方法返回true,即用户名、密码正确;否则Read方法返回false。
PS:至于SqlCommand对象中的ExecuteNonQuery方法,它主要用于执行更新数据库的操作,如增加,删除,修改记录等等。
下面我们就拿一个通讯录中添加联系人分组的例子来说明SqlCommand对象中的ExecuteNonQuery方法是如何实现在数据库中增加记录的操作。
该窗口如图所示,该窗体的两个text控件名称分别为txtGroupName和txtGroupmemo。
运用SqlCommand对象中的ExecuteNonQuery方法实现插入分组代码如下:
运行结果如下:
可见,我们成功调用了SqlCommand对象的ExecuteNonquery方法执行了insert语句,并在后台增加了一条记录。(即该方法成功执行SQL语句并返回受影响的行数)
二. 思维导图如下: