`
izuoyan
  • 浏览: 9223310 次
  • 性别: 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汇总

    1. **异常捕获**:在编写代码时,为了确保程序的健壮性,我们需要捕获并处理可能出现的`SqlCeException`。这通常通过`try-catch`块实现。例如: ```csharp try { SqlCeConnection conn = new SqlCeConnection(...

    ResultSetSample

    8. **异常处理**:在处理数据库操作时,应始终捕获可能抛出的SqlCeException和其他异常,以处理错误并确保程序的健壮性。 9. **性能优化**:考虑到SqlCeResultSet可能会包含大量数据,为了提高性能,可以考虑使用...

    一个SQL CE的数据库操作访问类

    6. **错误处理和异常封装**:为了提高代码的健壮性,类库应当捕获并处理可能出现的数据库访问异常,可能包括`SqlCeException`和其他相关异常,提供有意义的错误信息给调用者。 7. **参数化查询**:为了防止SQL注入...

    移动开发SQLCE

    5. **错误处理**:捕获并处理SqlCeException,以应对可能的数据库操作异常。 6. **数据持久化**:利用SqlCeDataAdapter和DataSet进行数据的保存和加载,实现数据在内存和数据库间的转换。 7. **查询语言SQL CE**:...

    System.Data.SqlServerCe.zip

    6. 处理异常:使用try-catch块捕获可能的SqlCeException,并进行相应的错误处理。 通过以上步骤,开发者可以在C#应用程序中轻松地实现对SQL Server Compact Edition数据库的读写操作。这个小型数据库引擎虽然功能...

    Sql CE 数据库 示例源代码(初学CE数据库的经典资料)

    - Sql CE会抛出`SqlCeException`,需要在代码中捕获以处理错误。 源代码"SqlCE-TEST"可能包括了以上操作的示例,如创建数据库、执行查询、事务处理、存储过程等。通过阅读和运行这些示例,初学者可以更好地理解Sql...

    wince数据库简单示例

    8. **错误处理**:使用`SqlCeException`处理可能出现的错误,如连接失败、SQL语法错误等。通过捕获异常并检查`InnerException`或`Message`属性,获取具体错误信息。 9. **关闭与释放资源**:操作完成后,记得关闭`...

    windows mobile c# 操作sql数据库

    使用`SqlCeException`类捕获并处理可能出现的数据库错误,如连接失败、语法错误或约束冲突等。 10. **性能优化**: 考虑到移动设备资源有限,应优化SQL查询,减少不必要的数据读取。可以使用索引来提高查询速度,...

    SQLCEResultSetSample

    8. **错误处理**:在处理数据库操作时,应始终捕获可能的SqlCeException和其他异常,以确保程序的健壮性。 9. **性能优化**:避免在ResultSet中缓存大量数据,除非必要。如果只需要处理一行数据,使用DataReader更...

    Sqlce

    使用try-catch块处理可能出现的异常,例如SqlCeException。在catch块中可以获取错误信息并进行相应处理。 10. 数据库同步: Sqlce支持离线数据同步,允许在本地和远程服务器之间交换数据。使用...

    -------------------------------------------------------

    5. **错误处理**:学习如何捕获和处理SqlCeException,以便在运行时出现问题时能够妥善应对。 6. **性能优化**:在单连接模式下,可能需要关注查询性能,避免长时间持有连接,及时关闭不必要的连接。 7. **数据备份...

    sqlce 数据库使用 dll文件

    6. 错误处理:在可能出现错误的地方,需要捕获SqlCeException异常,并通过Sqlceer.*.dll获取用户友好的错误信息。 在实际应用中,还需要考虑性能优化、安全性和数据库备份恢复等问题。例如,可以通过合理设计数据库...

    WP8 本地数据库应用的实例

    9. **错误处理**:别忘了处理可能出现的异常,如SqlCeException,提供合适的错误信息给用户。 10. **性能优化**:考虑到移动设备的资源限制,避免频繁的数据库操作,可以使用缓存技术减少读写次数,或者使用批量...

    WinCE SqlCe数据库文件访问类对象

    在与数据库交互时,应捕获可能抛出的SqlCeException异常,以处理连接问题、权限错误或其他运行时错误。 5. **性能优化**: - 使用参数化查询防止SQL注入。 - 尽可能减少数据库连接的打开和关闭,因为这会增加...

    SQLCE_C#操作数据库详细代码

    此方法同样接收 SQL 查询语句作为参数,但返回一个 `DataSet` 对象,它包含查询结果的数据结构。 #### 执行非查询操作 除了查询数据之外,还需要能够执行如插入、更新或删除等非查询操作。示例代码中提供了以下...

    sqlce 程序开发

    SQLCE提供了SqlCeException类来捕获和处理数据库操作中的异常。通过对异常信息的分析,开发者可以定位并解决错误。 总结,SQLCE是开发者在构建轻量级、离线应用时的理想选择。理解其核心概念、操作方法以及性能优化...

    WinCE SQLCE

    8. **错误处理和异常处理**:在开发过程中,确保捕获并处理可能出现的`SqlCeException`,这可以帮助调试和优化代码。 9. **性能优化**:由于WinCE平台的资源限制,优化查询性能尤为重要。避免使用复杂的JOIN操作,...

    sqlCe开发代码示例

    `SqlCeException`类用于捕获和处理SQLCe相关的异常,而数据绑定则可以将数据库结果直接显示在UI控件上,如DataGridView。 通过这个SqlCe_Demo,你可以深入理解并实践SQLCe在C#环境中的各种操作,无论是新手还是有...

    windowmobile数据库连接

    在Windows Mobile 5.0平台...确保理解并正确处理异常,以及及时关闭数据库连接,以保证应用程序的稳定性和数据安全性。在实际开发过程中,你可能还需要考虑数据库的备份、恢复、同步等问题,以适应移动设备的特殊需求。

Global site tag (gtag.js) - Google Analytics