`
izuoyan
  • 浏览: 8943788 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

正确处理SqlCeException的方法

阅读更多

  如果你从事过 PPC 上的 .NET Compact Framework 1.0 和 SQL Server CE 2.0 的开发,应该已经跟 SqlCeException 交过手了。本文将向初学者介绍如何正确地捕获和有效地处理 SqlCeException。

一、捕获SqlCeException
  在 .NET Compact Framework 1.0 中,SqlCeException 是一个需要特殊处理的异常类,如果你不对它进行单独的捕获,获取到的异常信息将是"SqlCeException"或者空字符串,而不是你想要获取到的真实异常信息。接下来我给大家分析几段代码:
[代码1]

try
{
//创建一个数据库连接,连接字符串中的数据库是不存在的
SqlCeConnectionconn=newSqlCeConnection("DataSource=nonExistSource.sdf;");

//打开数据库连接,将抛出一个SqlCeException
conn.Open();
}
catch(Exceptionex)
{
//获取到的异常信息是空白字符串
MessageBox.Show(ex.Message);
}


  [代码1]的异常处理代码捕获到的是一个 SqlCeException 的异常实例,在 catch 块中没有对该实例进行类型转换,直接就获取它的 Message 值,得到的错误信息将是空白字符串,并非原始的异常信息。再看看[代码2]
[代码2]

try
{
//创建一个数据库连接,连接字符串中的数据库是不存在的
SqlCeConnectionconn=newSqlCeConnection("DataSource=nonExistSource.sdf;");

//打开数据库连接,将抛出一个SqlCeException
conn.Open();
}
catch(SqlCeExceptionssex)
{
//获取到的异常信息如下:
//"Thedatabasefilecannotbefound.Checkthepathtothedatabase.[,,,Filename,,]"
MessageBox.Show(ssex.Message);
}
catch(Exceptionex)
{
//获取其他异常信息
MessageBox.Show(ex.Message);
}


  在[代码2]中,我们对 SqlCeException 单独捕获,最后获取到了原始的错误信息"The database file cannot be found. Check the path to the database. [,,,File name,,]"。

二、处理SqlCeException
  如果你有一个对异常进行统一处理的类和方法,如:ExceptionManager.Publish(Exception exception)。根据我上面的分析,你不得不在 Pulibsh 方法中对 SqlCeException 进行类型转化。如[代码3] 所示:
[代码3]

StringBuildersb=newStringBuilder();
sb.Append(
"Message:");
if(exceptionisSqlCeException)
{
sb.Append(((SqlCeException)exception).Message);
}
else
{
sb.Append(exception.Message);
}

  从 SqlCeException.Message 属性获取到的错误信息往往是不够详细的,因为这些信息是在 SQL Server CE 2.0 中预先定义好的。我们希望获取到更加详细的错误信息,能够指导我们迅速找到出错代码的具体位置。比如在[代码2]中,我们想要知道找不到的数据库文件名称是什么。其实除了 Message 属性外,从 SqlCeException 中还可以获取到更多的错误信息,请看[代码4]
[代码4]

///<summary>
///产生一个详细错误消息的SqlCeException异常处理程序。
///</summary>
///<paramname="exception">SqlCeException异常对象。</param>
publicstaticvoidShowErrors(SqlCeExceptionexception)
{
//获取包含一个或多个SqlCeError对象的集合,这些对象包含有关
//SQLServerCE.NETFramework精简版数据提供程序产生的异常的详细信息。
SqlCeErrorCollectionerrs=exception.Errors;

//获取导致当前异常的Exception实例。
Exceptioninner=exception.InnerException;
if(null!=inner)
{
//显示内部异常信息。
MessageBox.Show("InnerException:"+inner.ToString());
}

StringBuildersb
=newStringBuilder();

//用消息框显示每个错误的详细信息
foreach(SqlCeErrorerrinerrs)
{
//标识错误类型的HRESULT值,这些错误不是SQLServerCE固有的。
sb.Append("ErrorCode:").Append(err.HResult.ToString("X"));

//对错误进行描述的文本。
sb.Append("\nMessage:").Append(err.Message);

//获取SqlCeError的本机错误号。
sb.Append("\nMinorErr.:").Append(err.NativeError);

//生成错误的提供程序的名称。
sb.Append("\nSource:").Append(err.Source);

//遍历前三个错误参数。SQLServerCE使用错误参数来提供有关错误的其他详细信息。
foreach(intnumParainerr.NumericErrorParameters)
{
//虽然错误可能存在参数,但并非发生的所有错误都返回参数。
//如果发生某个错误时没有返回任何参数,则该数组的值为0。
if(numPara!=0)
{
sb.Append(
"\nNum.Par.:").Append(numPara);
}
}

//遍历最后三个错误参数。SQLServerCE使用错误参数来提供有关错误的其他详细信息。
foreach(stringerrParainerr.ErrorParameters)
{
//虽然错误可能存在参数,但并非发生的所有错误都返回参数。
//如果发生某个错误时没有返回任何参数,则该数组的值将为空字符串。
if(errPara!=String.Empty)
{
sb.Append(
"\nErr.Par.:").Append(errPara);
}
}

MessageBox.Show(sb.ToString());
sb.Remove(
0,sb.Length);
}
}


  我们可以使用[代码4]中的 ShowErrors 方法来处理[代码2]中的 SqlCeException 异常。
[代码5]

try
{
//创建一个数据库连接,连接字符串中的数据库是不存在的
SqlCeConnectionconn=newSqlCeConnection("DataSource=nonExistSource.sdf;");

//打开数据库连接,将抛出一个SqlCeException
conn.Open();
}
catch(SqlCeExceptionssex)
{
//获取详尽的异常信息
ShowErrors(ssex);
}
catch(Exceptionex)
{
//获取其他异常信息
MessageBox.Show(ex.Message);
}

异常信息的内容如下图所示:

三、总结
  本文介绍的内容是我这段时间在项目开发中总结的经验,希望对刚刚接触 SQL Server CE 开发的人在处理 SqlCeException 上有帮助。

  示例代码

[参考]
SQL Server CE 2.0 Books Online: Error Handling in C#

原文地址:http://www.cnblogs.com/upto/archive/2005/11/24/HandlingSqlCeException.html

分享到:
评论

相关推荐

    sqlceexception汇总

    包括Demo,异常捕获信息详细,汇总服务器代理错误,复制传输错误,客户端代理错误

    asp.net知识库

    使用.ashx文件处理IHttpHandler实现发送文本及二进制数据的方法 制作一个简单的多页Tab功能 一完美的关于请求的目录不存在而需要url重写的解决方案! 在C#中实现MSN消息框的功能 XmlHttp实现无刷新三联动ListBox 鼠标...

    node-v10.17.0-linux-x64.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    使用opencv决策树训练mushroom数据集-python源码.zip

    使用opencv决策树训练mushroom数据集-python源码.zip

    基于Faster RCNN的人脸检测识别系统python源码+项目说明+wider-face数据集.zip

    基于Faster RCNN的人脸检测识别系统python源码+项目说明+wider_face数据集.zip ### 三,使用说明 1. 锚框的大小为[128、256、512],比率为[1:1、1:2、2:1]。 2. tensorflow的版本是'1.9.0',keras的版本是'2.1.5',除了使用tensorflow2.0之后版本,其他版本都可以尝试。不支持python2.x。 3. 使用的是tensorflow backend,theano可以自行修改。 4. wider face的Label文件格式与VOC2012的label不同,而我使用的Faster RCNN需要VOC2012的格式,所以需要将label文件转换一下格式。具体可以查看 [https://blog.csdn.net/qq_37431083/article/details/102742322](https://blog.csdn.net/qq_37431083/article/details/102742322) 5. 在训练过程中可能会出现`"ValueError: 'a' cannot be empty

    1985-2022年广东省企业专利明细数据-专利名称专利类型专利摘要专利授权专利分类号等

    1985-2022年广东省企业专利明细数据-专利名称专利类型专利摘要专利授权专利 分类号等 1、数据说明: 在知识经济时代,技术创新是实现经济内生增长的关键动力, 科技优势成为经济竞争优势的根本源泉。新一轮科技革命和产业变革加速,全球创新速度加 快,我国正在经历发展方式转变、经济结构优化、新旧动能转换的攻关期,创新日益成为破 解发展难题的关键。专利作为技术与知识的载体,其申请数量是创新研究中衡量创新最常用 的指标之一,中国成为创新领先国家也同样体现在专利申请量上。改革开放 40 年来, 我们的知识产权事业取得了举世瞩目的巨大成功,但也面临着“大而不强”的问题。引导专 利从追求数量向提高质量转变,这是国家近几年的政策扶持重点,也是未来专利申请审查的 一个风向标,针对海量专利数据的价值识别与预测,逐渐成为当前的研究热点。 本数据提 供了1985-2022年广东省的企业专利明细数据,可用于各类专利相关研究。 2、 数据来源: 数据来源为国家知识产权局,利用知识产权局的高级检索,选择地区、年份、 专利类型,对全国31省的各类专利进行统计并将检索结果整理为面板数据,包括发明公开 、发明授权、实用

    Kaggle竞赛 稻田病害分类-python源码.zip

    Kaggle竞赛 稻田病害分类-python源码.zip

    基于paddle+mediapipe注意力机制的表情识别python源码+数据集+模型+项目说明.zip

    文件目录解释 # 1. Models 用来存放的模型,可以是已有的Paddle格式的模型 # 2. Pages - assets 用到的图片资源 - assets.qrc 使用PySide生成的样式文件 - assets_rc.py GUI界面的样式文件,此目录和根目录都有,我忘记是调用的哪一个了,所以都保留了。 # 3. Utils - AttResNet.py 网络代码 - DatasetProcess.py 数据集处理代码 - FaceDetection.py 人脸检测代码 - Predict.py 模型预测代码 - VisualTrain.py 模型训练代码 - CSV文件 用来保存数据集和创建的信息 # 4. Dataset 存放数据集的目录 注意事项 * # 配置好环境,安装使用PySide的工具,不会安装见如下以PyCharm为例的说明 1. 依次点击 File:arrow_right:Settings:arrow_right:Tools:arrow_right:External Tools:arrow_right::heavy_plus_sign:添加PySide工具,

    机械设计小线圈生产打蜡机sw20非常好的设计图纸100%好用.zip

    机械设计小线圈生产打蜡机sw20非常好的设计图纸100%好用.zip

    手机和讯财金网触屏版自适应手机wap财金网站模板.zip

    触屏版自适应手机wap软件网站模板 触屏版自适应手机wap软件网站模板

    基于普中51开发板的超声波测距+蜂鸣器报警 (附开发板原理图)

    基于普中51开发板的超声波测距+蜂鸣器报警 (附开发板原理图) 基于普中51开发板的超声波测距+蜂鸣器报警 (附开发板原理图)

    机械设计大倾角输送机sw17非常好的设计图纸100%好用.zip

    机械设计大倾角输送机sw17非常好的设计图纸100%好用.zip

    1999-2022年投资者信心指数表、消费者信心指数表、企业景气指数表、企业家信心指数表

    每个压缩包都附有数据表和数据来源 信心指数 1.投资者信心指数表 数据区间:20 08.04-2022.09,月度数据(数据库中该项数据的全部内容) 字段设置:全 选 全部字段: DeclareDate [发布日期] - YYYY-MM-DD SgnMonth [统计月度] - YYYY-MM IndexCode [指数编 码] - Q4001信心指数;Q4002国内经济基本面;Q4003国内经济政策; Q4004国际经济金融环境;Q4005股票估值;Q4006大盘乐观;Q4007大 盘反弹;Q4008大盘抗跌;Q4009买入; Name [指数名称] - 信心指 数;国内经济基本面;国内经济政策;国际经济金融环境;股票估值;大盘乐观;大盘反弹 ;大盘抗跌;买入; Value [当月值] - LastValue [上月值] - Mom [环比增减] - 压缩包所含文件: 数据样例: 2.消费者信心指数表 数据区间:1999.01-2022.09,月度数据(数据库中该项数据的全部内容 ) 字段设置:全选 全部字段: SgnMonth [统计月度] - YYYY-M M Expect

    使用Keras+TensorFlow进行目标检测-python源码.zip

    使用Keras+TensorFlow进行目标检测-python源码.zip

    node-v10.24.0-linux-x64.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    深圳曙光医院触屏自适应html5手机医院网站模板下载 .zip

    触屏版自适应手机wap软件网站模板 触屏版自适应手机wap软件网站模板

    手机wap网站 仿腾讯新闻.zip

    触屏版自适应手机wap软件网站模板 触屏版自适应手机wap软件网站模板

    仿想去网触屏版html5手机wap网站模板购物网站模板.zip

    触屏版自适应手机wap软件网站模板 触屏版自适应手机wap软件网站模板

    lda代码-checkpoint-checkpoint.ipynb

    lda代码-checkpoint-checkpoint.ipynb

    2011-2022年全国各区县每日天气气温风向风力数据

    变量如下: Ctnb[城市编号]-城市编号 Prvn[所属省份]-城市所属的省份 Pftn[所属地级市]-城市所属的地级市 Ctn[城市名称]-城市名称 Dat e[日期]-天气数据发布的时间 Dywek[星期时间]-星期时间 Htmpt[最 高气温]-当天天气最高气温,单位:℃ Ltmpt[最低气温]-当天天气最低气温, 单位:℃ Wthcdt[天气情况]-当天天气的具体状况 Wnddrt[风向]-当 天天气风吹来的方向 Wndfrc[风力]-当天天气风力级别 数据展示:

Global site tag (gtag.js) - Google Analytics