---------------------- 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培训、期待与您交流! ----------------------