1.概述
在这里,我们将学习的C#知识与SQLServer数据库结合起来。使用SQLServer数据库取代ListT来存储数据。
这样,我们开发的.NET应用程序,其数据是永久存储的,这才是真正的软件开发,且可以迁移到服务器上正式使用。
在.NET开发中,掌握了C#语言、ADO.NET技术和SQLServer数据库,我们就可以编写出功能多样的应用程序。
2.认识ADO.NET
ADO.NET是在.NETFramework中可以用来操作数据库。微软封装好了一套处理数据库相关操作的类和方法。
ADO.NET不仅可以操作SQLServer数据库,还可以操作Oracle、MySQL数据库等,我们只需要学会使用即可。
ADO.NET体系结构如下:
ADO.NET结构图3.SqlConnection对象
在ADO.NET中,SqlConnection表示一个到SQLServer数据库的连接。此类是密封类,不能被继承。该类存在:System.Data.SqlClient名称空间下,使用时需要使用using引用该名称空间:
usingSystem.Data.SqlClient;
3.1.数据库连接字符串
SqlConnection类在实例化为对象时,需要传入一个数据库连接字符串为参数。
实例化SqlConnection基本语法如下:
SqlConnectionconn=newSqlConnection(数据库连接字符串);
对于SqlConnection函数,实例化后需要传入connectionString参数作为数据库连接字符串,微软给出了多种写法,有连接本地的,也有连接服务器的。最常用的还是连接SQLServer身份验证的数据库连接。
SQLServer数据库连接字符串的基本格式如下:
DataSource=服务器名称或IP;InitialCatalog=数据库名称;UserId=用户名;Password=密码
如果连接的是Windows身份验证,则基本格式如下:
DataSource=服务器名称或IP;InitialCatalog=数据库名称;IntegratedSecurity=True
本机可以使用.表示。
integratedsecurity=true的意思是集成验证,也就是说使用Windows验证的方式去连接到数据库服务器。这样方式的好处是不需要在连接字符串中编写用户名和密码,从一定程度上说提高了安全性。
例如:连接本地的数据库,使用SQLServer身份验证连接,用户名是sa,密码是。
stringstrConn=DataSource=.;InitialCatalog=BW_TestDB;Uid=sa;Pwd=;SqlConnectionconn=newSqlConnection(strConn);
其中UserId可以省略为Uid,Password可以省略为Pwd。
3.2.Open()方法
在SqlConnection对象中,考虑到数据库连接的安全性,数据库连接字符串编写完成之后,还需要使用SqlConnection对象的open()方法打开数据库连接:
stringstrConn=DataSource=.;InitialCatalog=BW_TestDB;Uid=sa;Pwd=;SqlConnectionconn=newSqlConnection(strConn);conn.Open();
打开数据库连接之后,就可以进行与数据库的交互操作了,如:添加数据、删除数据库、修改数据等。
3.3.Close()和Dispose()方法
操作完数据库之后,还需要使用SqlConnection对象的Close()方法关闭数据连接。
stringstrConn=DataSource=.;InitialCatalog=BW_TestDB;Uid=sa;Pwd=;SqlConnectionconn=newSqlConnection(strConn);conn.Open();//数据库的相关操作conn.Close();
在SqlConnection对象中,Dispose()方法实际是和Close()做的同一件事,唯一的区别是Dispose()方法清空了数据库连接字符串connectionString,即设置为了null。
stringstrConn=DataSource=.;InitialCatalog=BW_TestDB;Uid=sa;Pwd=;SqlConnectionconn=newSqlConnection(strConn);conn.Open();//数据库的相关操作conn.Dispose();
Close()方法与Dispose()方法的本质区别如下图所示:
Close()方法的使用在上图中,使用Close()方法关闭数据库连接后,数据库连接字符串还是存在的,但State状态已是Closed了,表示已关闭。
Dispose()方法的使用在这里使用了Dispose()方法,不仅关闭了数据库连接,还清空了数据库连接字符串,其State状态是Closed。
从上面2张图可知,假如在关闭数据库连接后不需要连接字符串的情况下,使用Dispose()方法更安全一些。
3.4.ConnectionString属性
如果在实例化SqlConnection对象时,没有传入数据库连接字符串,还可以使用ConnectionString属性设置连接数据库的字符串。ConnectionString属性是读写属性。如下代码:
//数据库连接字符串stringstrConn=DataSource=.;InitialCatalog=BW_TestDB;Uid=sa;Pwd=;//实例化SqlConnection对象,但没有参数SqlConnectionconn=newSqlConnection();//设置数据库连接字符串conn.ConnectionString=strConn;//打开conn.Open();//关闭conn.Dispose();
3.5.ConnectionTimeout属性
ConnectionTimeout属性用于:获取在尝试建立连接时终止尝试并生成错误之前所等待的时间。
ConnectionTimeout属性是只读属性,只能用来获取值,返回int类型的超时时间,等待连接打开的时间(以秒为单位)。默认值为15秒。
inttimeOut=conn.ConnectionTimeout;
3.6.Database和DataSource属性
Database属性也是只读属性,用于获取当前数据库或连接打开后要使用的数据库的名称。
stringdbName=conn.Database;
DataSource属性是只读属性,获取要连接的SQLServer实例的名称。
stringds=conn.DataSource;
3.7.State属性
State属性是只读属性,指示最近在连接上执行网络操作时,用于判断SqlConnection对象的连接状态。State属性返回的类型是System.Data.ConnectionState。
State状态在开发.NET应用程序之前,都会先安装好SQLServer数据库,并确定好数据库服务器名称、数据库名称、用户名和密码等。
然后在C#代码中实例化ADO.NET的SqlConnection对象,并传入数据库连接字符串。
可以在VisualStudio中打断点调试一下SqlConnection对象,查看是否可以连接到数据库服务器上。
接着后面就要实例化SqlCommand对象,执行传入的SQL语句,从而对SQLServer数据库进行操作。
最后记住一定要关闭数据库连接,否则可能会泄漏数据。