简单介绍C# SQL Server

开发 后端
本文介绍C# SQL Server2000对事务提供了很好的支持。我们可以使用SQL语句来定义、提交以及回滚一个事务。

体验SQL语言的事务机制

作为大型的企业级数据库,C# SQL Server2000对事务提供了很好的支持。我们可以使用SQL语句来定义、提交以及回滚一个事务。

如下所示的SQL代码定义了一个事务,并且命名为"MyTransaction

这里用到了C# SQL Server2000自带的示例数据库pubs,提交事务后,将为所有畅销计算机书籍支付的版税增加 10%。

打开C# SQL Server2000的查询分析器,选择pubs数据库,然后运行这段程序,结果显而易见。

可是如何在C#程序中运行呢?我们记得在普通的SQL查询中,一般需要把查询语句赋值给SalCommand.CommandText属性,这里也就像普通的SQL查询语句一样,将这些语句赋给SqlCommand.CommandText属性即可。要注意的一点是,其中的"GO"语句标志着SQL批处理的结束,编写SQL脚本是需要的,但是在这里是不必要的。我们可以编写如下的程序来验证这个想法:

//TranSql.csusingSystem;  
usingSystem.Data;  
usingSystem.Data.SqlClient;  
namespaceAspcn  
{  
publicclassDbTranSql  
{  
file://将事务放到SQLServer中执行  
publicvoidDoTran()  
{  
file://建立连接并打开  
SqlConnectionmyConn=GetConn();myConn.Open();  
SqlCommandmyComm=newSqlCommand();  
try  
{  
myComm.Connection=myConn;  
myComm.CommandText="DECLARE@TranNameVARCHAR(20)";  
myComm.CommandText+="SELECT@TranName='MyTransaction'";  
myComm.CommandText+="BEGINTRANSACTION@TranName";  
myComm.CommandText+="USEpubs";  
myComm.CommandText+="UPDATEroyschedSETroyalty=royalty*1.10WHEREtitle_idLIKE'Pc%'";  
myComm.CommandText+="COMMITTRANSACTIONMyTransaction";  
myComm.ExecuteNonQuery();  
}  
catch(Exceptionerr)  
{  
thrownewApplicationException("事务操作出错,系统信息:"+err.Message);  
}  
finally  
{  
myConn.Close();  
}  
}  
file://获取数据连接  
privateSqlConnectionGetConn()  
{  
stringstrSql="DataSource=localhost;IntegratedSecurity=SSPI;userid=sa;password=";  
SqlConnectionmyConn=newSqlConnection(strSql);  
returnmyConn;  
}  
}  
 
publicclassTest  
{  
publicstaticvoidMain()  
{  
DbTranSqltranTest=newDbTranSql();  
tranTest.DoTran();  
Console.WriteLine("事务处理已经成功完成。");  
Console.ReadLine();  
}  
}  

  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.

注意到其中的SqlCommand对象myComm,它的CommandText属性仅仅是前面SQL代码字符串连接起来即可,当然,其中的"GO"语句已经全部去掉了。这个语句就像普通的查询一样,程序将SQL文本事实上提交给DBMS去处理了,然后接收返回的结果(如果有结果返回的话)。

很自然,我们最后看到了输出"事务处理已经成功完成",再用企业管理器查看pubs数据库的roysched表,所有title_id字段以"PC"开头的书籍的royalty字段的值都增加了0.1倍。

这里,我们并没有使用ADO.net的事务处理机制,而是简单地将执行事务的SQL语句当作普通的查询来执行,因此,事实上该事务完全没有用到.net的相关特性。
了解.net中的事务机制

如你所知,在.net框架中主要有两个命名空间(namespace)用于应用程序同数据库系统的交互:System.Data.SqlClient和System.Data.OleDb。前者专门用于连接Microsoft公司自己的SQL Server数据库,而后者可以适应多种不同的数据库。这两个命名空间中都包含有专门用于管理数据库事务的类,分别是System.Data.SqlClient.SqlTranscation类和System.Data.OleDb.OleDbTranscation类。

就像它们的名字一样,这两个类大部分功能是一样的,二者之间的主要差别在于它们的连接机制,前者提供一组直接调用C# SQL Server 的对象,而后者使用本机 OLE DB 启用数据访问。 事实上,ADO.net 事务完全在数据库的内部处理,且不受 Microsoft 分布式事务处理协调器 (DTC) 或任何其他事务性机制的支持。本文将主要介绍System.Data.SqlClient.SqlTranscation类,下面的段落中,除了特别注明,都将使用System.Data.SqlClient.SqlTranscation类。

【编辑推荐】

  1. 分析C#不安全代码
  2. 浅析C#调用ImageAnimator
  3. C#连接Access、SQL Server数据库
  4. 浅谈C#固定的和活动的变量
  5. 介绍C#中的值类型
责任编辑:佚名 来源: 博客园
相关推荐

2009-08-17 18:30:29

C# SQL Serv

2009-08-24 15:41:50

C#连接SQL Ser

2009-08-21 17:55:52

C#复合控件

2009-08-10 16:19:37

C#冒泡排序

2009-08-14 17:27:56

C#方法参数

2009-08-07 17:41:40

C#预处理

2009-08-27 10:19:22

C#匿名类型

2009-08-06 14:53:41

C# User类

2009-08-18 17:37:57

C#固定指针

2009-08-07 17:12:07

C# DLL函数

2009-08-20 16:25:59

C# 匿名方法

2009-08-13 17:36:54

编译C#代码

2009-08-25 13:38:35

C# Timer组件

2009-08-03 17:51:43

C#引用类型

2009-09-03 09:40:57

C#创建表单

2009-08-14 16:46:44

C#元数据

2009-09-01 16:19:57

C# new()约束

2009-08-25 14:42:41

由C++转向C#

2009-09-04 10:16:30

C#数据类型

2009-09-07 10:48:53

C#数据类型
点赞
收藏

51CTO技术栈公众号