ADO.NET学习手记(三)

       好了,Data命名空间了解得差不多了,现在进入Data.SqlClient命名空间吧。Let’s go

一、概述

       SqlClient是一个数据提供程序,其地位与OracleClientOdbcOleDb相当。可以协助应用程序快速访问数据库。

       简单地说,SqlClient的应用就是:利用SqlConnection连接数据库,数据源由SqlCommand确定;利用SqlDataAdapter来桥接DataSet与数据源。如果想自动同步DataSet与数据库,SqlCommandBuild就有用了。如果你只想读而不想更改数据,那么用SqlDataReader吧。当然了,事务是必不可少的,SqlTransaction就是用来做这事的。

       出错啦——SQL Server返回错误时,会引发SqlException异常,同时创建SqlErrorSqlErrorCollection

       SqlParameterSqlParameterCollection是什么意思?

       如何保证数据库访问安全级别——SqlClientPermissionSqlClientPermissionAttribute

       有两种访问数据库的方式:

1、仅使用SqlCommandSqlConnection访问数据库。在这种情况下,SqlCommand的内容通常为跟更新数据库有关的SQL。例:

public void insertRow()

{

       string myConnectionString = “Initial Catalog=Northwind;Data Source=localhost;Integrated Security=SSPI;";

       SqlConnection myConnection = new SqlConnection(myConnectionString);

       String myInsertQuery = “insert into Customers (customerID,companyName) values ('NWIND', 'Northwind Traders')”;

       SqlCommand myCommand = new SqlCommand(myInsertQuery);

       MyCommand.Connection = myConnection;

       MyCommand.Open();

       MyCommand.ExecuteNonQuery();

       MyCommand.Collection.Close();

}    

2、使用SqlCommandSqlConnectionSqlDataAdapterDataSet访问数据库。在这种情况下,SqlCommand的内容通常为查询。例:

public DataSet SelectSqlRows(DataSet dataSet,string connection,string query)

{

       SqlConnection conn = new SqlConnection(connection);

       SqlDataAdapter adapter = new SqlDataAdapter();

       Adapter.SelectCommand = new SqlCommand(query,conn);

       Adapter.Fill(dataSet);

       Return dataSet;

}

二、SqlConnection

       SqlConnection表示与数据源的一个唯一的会话。必须使用closedispose关闭。如果执行SqlCommand生成SqlException时,严重度小于等于19时,不会关闭连接。大于19时会关闭连接。

三、SqlCommand

       表示要对数据库执行的一个Sql或存储过程。

       有四种方式:

       ExecuteReader:主要用于Select等查询语句。例:

       cmd.CommandText = “select a,b from k”;

       SqlDataReader myReader = cmd.ExecuteReader();

       Try

       {

              while (myReader.Read())

              {

                     Console.WriteLine(myReader.GetInt32(0)+”              “+myReader.GetInt32(1));

              }

       }

       catch

       {

              myReader.Close();

//关闭连接

       }

 

       ExecuteNonQuery:主要用于数据库操作语句。

       ExecuteScalar:主要用于聚合查询语句,或返回一个值的查询,或结果集中第一行的第一列或空引用(如果结果集为空)。例:

       Cmd.CommandText = “select count(*) from orders”;

       Int32 I = (Int32)cmd.ExecuteScalar();

       ExecuteXMLReader:将 CommandText 发送到 Connection 并生成一个 XmlReader 对象。

四、SqlDataReader

       上面已举过例了。需要说明的是:在读数之前,SqlDataReader默认位置在所有记录前。需调用Read()来访问数据。

       Read()的作用是行进到下一条记录,是Bool型的,如有记录返true,否则返false

四、SqlDataAdapter

       用得较多了。

五、事务

       DataSet中的事务只用于DataSet,真正的事务控制在这里进行。

       一般的过程是这样的:

       //建立并打开连接

SqlConnection conn = new SqlConnection(…………)

       SqlConnection.Open();

       //创建myCommand

       SqlCommand myCommand = SqlConnection.CreateCommand();

       //创建事务

       SqlTransaction trans = SqlConnection.BeginTransaction(IsolationLevel.ReadCommitted,"SampleTransaction");

       //将事务、连接与Command对象相关

       MyCommand.Connection = myConnection;  //这句是多余的,上面已有同样功能

       MyCommand.Transaction = trans;

 

       Try

       {

              myCommand.CommandText = “   “;

              myCommand.ExcuteNonQuery();

              trans.Commit();   //提交事务

       }

       catch(SqlException s)

       {

              trans.Rollback(“SampleTransaction”);  //回滚事务

       }

       从这个程序可以很清楚地表明:事务是由SqlConnection创建,并必须关联到SqlCommand,最后由事务自身来进行提交或回滚操作的。

       同时可以看到:一个连接可以打开多个不同名的事务。

       还有:IsolationLevel事务隔离级别(枚举)有如下几种:

       Chaos:无法改写隔离级别更高的事务中挂起的操作。

       ReadCommitted:在正在读取数据时保持共享锁,避免脏读。

       ReadUncommitted:可以脏读。

       RepeatableRead:可重复读取。

       Serializable:最高级别。

       分别与SQL Server中四种隔离级别对应。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值