------- Windows Phone 7手机开发.Net培训、期待与您交流! -------

背景:
过年前,响应黑马.net论坛吕老师《【活动】20天,做项目得积分,是大牛你就来........》(http://bbs.itheima.com/thread-37622-1-1.html)的帖子,学习了杨中科老师的wpf教程,参与了此活动。先将项目中遇到的几个小知识点分享下。

一、TransactionScope的使用:
(目的:多表操作时,有时候希望,一张表数据操作失败,其他表被数据数据能回滚等)
第一步:引入dll:using System.Transactions;
第二步:(参考此例子)
       实例:
           using (TransactionScope ts = new TransactionScope())
           {
               DepartmentDAL dal = new DepartmentDAL();
               dal.Insert("测试1");//第一个sql语句操作
               Operator op = new Operator();
               op.UserName = "hello";
               op.Password = "33333";
               op.RealName = "haha";
               new OperatorDAL().Insert(op);第二个sql语句操作
               ts.Complete();//一定要complete,否则数据无法提交
           }  
但是,使用TransactionScope需要配置如下信息:
在控制面板--->管理工具--->服务 中,开启Distributed Transaction Coordinator 服务。
a.控制面板->管理工具->组件服务->计算机->我的电脑->右键->属性
b.选择MSDTC页, 确认"使用本地协调器"
c.点击下方"安全配置"按钮
d.勾选: "允许网络DTC访问","允许远程客户端","允许入站","允许出站","不要求进行身份验证".
e.对于数据库服务器端, 可选择"要求对呼叫方验证"
f.勾选:"启用事务Internet协议(TIP)事务"。
g.在双方防火墙中增加MSDTC.exe例外
  可用命令行: netsh firewall set allowedprogram %windir%\system32\msdtc.exe MSDTC enable
二、使用水晶报表时,报错,如:Crystal Reports for vs2010 运行找不到文件 crdb_adoplus.dll'
   在使用水晶报表时,报错:【Could not load file or assembly 'file:///C:/Program Files/SAP BusinessObjects/Crystal Reports for .NET Framework 4.0/Common/SAP BusinessObjects Enterprise XI 4.0/win32_x86/dotnet1/crdb_adoplus.dll' or one of its dependencies. 系统找不到指定的文件。】
解决办法:
在app.config里面下入下面的代码就可以解决问题
<?xml version="1.0"?>  
<configuration>  
<startup  useLegacyV2RuntimeActivationPolicy="true">  
 <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>  
</startup>  
</configuration>  
三、异常统一处理:
在app.config中加入【DispatcherUnhandledException="Application_DispatcherUnhandledException"】,如下:
<Application x:Class="HRMSystem.UI.App"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            StartupUri="MainWindow.xaml"  DispatcherUnhandledException="Application_DispatcherUnhandledException">
   <Application.Resources>
   </Application.Resources>
</Application>
接着在app.cs中加入处理时间:
   public partial class App : Application
   {
       private void Application_DispatcherUnhandledException(object sender, System.Windows.Threading.DispatcherUnhandledExceptionEventArgs e)
       {
           //在Application_DispatcherUnhandledException中集中处理异常
           MessageBox.Show("程序中出现了严重错误,请联系开发人员 charles xiao!" + e.Exception.Message);
           e.Handled = true;
       }
   }