您的位置:首页 > 职场人生

黑马程序员--数据库开发及ADO.NET学习总结

2012-08-04 23:44 501 查看
---------------------- Windows Phone 7手机开发、.Net培训、期待与您交流! ----------------------

DBMS数据库管理系统,一般情况下说数据库即是指数据库管理系统,常见数据库管理系统有:SYBASE,ORACLE,MySQL,ACCESS,MS SQL Server,其中MS SQL Server是.NET开发常用数据库。

ADO.NET类别 (Class) 位于 System.Data.dll 中,提供了对各种数据库的统一操作接口。ADO.NET中用于存取和管理资料的两个主要元件是 .NET Framework 资料提供者和 DataSet。

.NET Framework 资料提供者:

(1)Connection 物件会提供资料来源的连接,负责连接数据库;

(2) Command 物件可让您存取资料库命令,负责对数据库执行命令;

(3)DataReader 则可提供来自资料来源的高效能资料流。

(4)使用 Command 物件与资料来源处执行 SQL 命令,以便将资料载入 DataSet,并且将 DataSet 内的资料变更调节回资料来源,即负责数据集和数据库的联系。

DataSet:

它可独立于任何资料来源外而存取资料,因此,它可与多个不同的资料里来源搭配使用、与 XML 资料搭配使用,DataSet 包含一或多个由资料列和资料行所组成的 DataTable物件集合,以及 DataTable 物件中的主索引键、外部索引键、条件约束 (Constraint) 及资料的相关资讯。

下面对.NET Framework 资料提供者做详细介绍:

sql server 的.NET Framework 资料提供者位于命名空间System.Data.SqlClient,有SqlConnection类,SqlCommand类,SqlDataAdapter类和SqlDataReader类。

SqlConnection 对象用来创建数据库连接,SqlCommand对象执行数据库命令,SqlDataAdapter和SqlDataReader 变量用来存放SqlCommand对象执行数据库命令后返回的数据,

SqlConnection,SqlCommand,SqlDataAdapter以及SqlDataReader在使用时都会创建链接,因此一旦这些类对应的对象完成操作,要关闭链接,否则会导致链接池中的链接不够用,

在我们创建一个连接的实例,并调用Open()方法时,连接池管理程序会在连接池中找到一个可用的连接;当调用Close()方法时,连接池管理程序又将连接返回到连接池中,以供下一次调用Open()方法时使用。

连接数据库并执行相关命令:

string ConnStr = "data source =.;Initial Catalog = BRC;user = sa;password = 123456";//连接字符串

using ( SqlConnection sqlCon = new SqlConnection(ConnStr))//实例化一个SqlConnection对象,创建数据库连接,using范围之外,sqlCon的链接就被释放了。

{

//打开数据库连接

sqlCon.Open();

using ( SqlCommand cmd = new SqlCommand("select * from pe_task"))//创建一个SqlCommand对象,在using范围之外,cmd的链接就被释放了。

{

cmd.Connection = sqlCon;

SqlDataReader dr = cmd.ExecuteReader();//创建一个SqlDataReader 对象读取数据库中的数据,ExecuteReader返回一个多行多列的结果集

if (dr.HasRows)

{

while (dr.Read())//逐行读取dr中的数据

{

int FID = dr.GetInt32(dr.GetOrdinal("FMID"));

Console.WriteLine("sqlCon:" + sqlCon.State.ToString());//sqlCon的状态为open

Console.WriteLine("dr:" + dr.IsClosed.ToString());//dr的状态为open

}

}

Console.WriteLine("sqlCon:" + sqlCon.State.ToString());//sqlCon的状态为open

Console.WriteLine("dr:" + dr.IsClosed.ToString());//dr的状态为open

}

Console.WriteLine("sqlCon:" + sqlCon.State.ToString());//sqlCon的状态为closed

Console.WriteLine("dr:" + dr.IsClosed.ToString());//dr的状态为关闭

}

通过这段程序可以看出:using 会释放对象的链接,并且当SqlConnection的链接被释放后,dr的链接对象变成了关闭状态。

若使用SqlDataReader reader = cmd.ExecuteReader(CommandBehavior.CloseConnection);则当reader关闭连接后,sqlCon的链接也会被关闭。

使用SqlDataAdapter填充数据集:

string ConnStr = "data source =.;Initial Catalog = BRC;user = sa;password = 123456";

using (SqlConnection sqlCon = new SqlConnection(ConnStr))//实例化一个SqlConnection对象,创建数据库连接

{

//打开数据库连接

sqlCon.Open();

using (SqlCommand cmd = new SqlCommand("select * from pe_task"))//

{

cmd.Connection = sqlCon;

SqlDataAdapter dr = new SqlDataAdapter(cmd);

DataSet dst = new DataSet();

dr.Fill(dst);

}

}

sql 防漏洞:

例如在登录某一个需要用户名和密码的系统时,若简单的用拼接sql 语句的方法来查询用户名密码可能导致密码泄露

如 sql = "select * from t_users where fname = "+name+" and fpassword = "+password+" or 1=1" 由于 后面的查询条件1=1永远是真,所以产生用户信息外泄的不安全情况,

但若将name 和password 用参数的形式传给数据库就不会出现这样的情况:

sql = "select * from t_users where fname =@ name and fpassword = @password",这样就会直接在数据库中查询fname =@ name 并且fpassword = @password的用户信息,而不是拼 sql语句。

---------------------- Windows Phone 7手机开发、.Net培训、期待与您交流! ----------------------
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: