C#执行SQL查询时如何获取查询成功或报错的执行状态
C#中判断SQL查询执行状态的实现方式
SqlCommand.ExecuteReader() 本身的执行逻辑是:只要SQL执行过程中出现语法错误、连接中断、权限不足、对象不存在等问题,会直接抛出对应异常;如果方法正常返回、没有抛出异常,就说明SQL在服务端已经执行成功。你可以通过两层逻辑完成完整的状态判断:
- 用
try-catch块包裹整个数据库操作流程,只要捕获到异常就说明执行失败,其中SqlException类型会携带SQL Server返回的具体错误码、错误信息,方便定位问题 - 拿到
SqlDataReader实例后,可通过其属性、读取操作校验返回结果是否符合业务预期,避免SQL执行成功但结果不符合要求的情况
完整实现代码参考:
using (SqlConnection conn = new SqlConnection("<placeholder>")) { try { conn.Open(); SqlCommand command = new SqlCommand("SELECT * FROM table", conn); // 此步无异常抛出即代表SQL服务端执行成功 using (SqlDataReader reader = command.ExecuteReader()) { // 可选:判断是否存在返回数据行 bool hasReturnData = reader.HasRows; // 按业务需求遍历读取结果 while (reader.Read()) { // 字段读取逻辑 } // 执行到此处代表整个查询、数据读取流程全部成功 } } catch (SqlException sqlErr) { // 处理SQL执行类错误,可通过sqlErr.Number获取数据库返回的标准错误码 Console.WriteLine($"SQL执行错误:{sqlErr.Message}"); } catch (Exception generalErr) { // 处理其他非SQL类错误,比如连接配置错误、资源不足等问题 Console.WriteLine($"操作异常:{generalErr.Message}"); } }
补充说明:
SqlDataReader必须放在using块中使用,否则会出现连接泄漏、资源占用不释放的问题。如果执行的是增删改类的非查询语句,可调用ExecuteNonQuery()方法,其返回的整数值为语句影响的行数,可辅助判断执行结果是否符合业务预期。
内容的提问来源于stack exchange,提问作者Christian01
相关产品推荐
相关产品推荐

