防止查询数据返回数据行为零引起的逻辑判断重复或抛出异常

以下代码以操作ORACLE数据库为例

1.返回DataSet数据,若查询返回行数为零,返回null

 1         /// <summary>
 2         /// 执行查询语句,返回DataSet
 3         /// </summary>
 4         /// <param name="SQLString">查询语句</param>
 5         /// <returns>DataSet</returns>
 6         public static DataSet Query(string SQLString, params OracleParameter[] cmdParms)
 7         {
 8             using (OracleConnection connection = new OracleConnection(connectionString))
 9             {
10                 OracleCommand cmd = new OracleCommand();
11                 PrepareCommand(cmd, connection, null, SQLString, cmdParms);
12                 using (OracleDataAdapter da = new OracleDataAdapter(cmd))
13                 {
14                     DataSet ds = new DataSet();
15                     try
16                     {
17                         da.Fill(ds, "ds");
18                         cmd.Parameters.Clear();
19                     }
20                     catch (System.Data.OracleClient.OracleException ex)
21                     {
22                         throw new Exception(ex.Message);
23                     }
24                     //没有数据返回,返回null
25                     if (ds.Tables[0].Rows.Count <= 0)
26                     {
27                         return null;
28                     }
29                     return ds;
30                 }
31             }
32         }

2.返回DataTable数据,若查询返回行数为零,返回null

 1         /// <summary>
 2         /// 执行查询语句,返回DataTable
 3         /// </summary>
 4         /// <param name="SQLString">查询语句</param>
 5         /// <returns>DataTable</returns>
 6         public static DataTable Query(string SQLString, params OracleParameter[] cmdParms)
 7         {
 8             using (OracleConnection connection = new OracleConnection(connectionString))
 9             {
10                 OracleCommand cmd = new OracleCommand();
11                 PrepareCommand(cmd, connection, null, SQLString, cmdParms);
12                 using (OracleDataAdapter da = new OracleDataAdapter(cmd))
13                 {
14                     DataTable dt = new DataTable();
15                     try
16                     {
17                         da.Fill(dt);
18                         cmd.Parameters.Clear();
19                     }
20                     catch (System.Data.OracleClient.OracleException ex)
21                     {
22                         throw new Exception(ex.Message);
23                     }
24                     //没有数据返回,返回null
25                     if (dt.Rows.Count <= 0)
26                     {
27                         return null;
28                     }
29                     return dt;
30                 }
31             }
32         }

PrepareCommand的实现(1和2中均有用到)

 1         /// <summary>
 2         /// 打开数据库连接,传递参数等前置处理
 3         /// </summary>
 4         /// <param name="cmd">OracleCommand</param>
 5         /// <param name="conn">数据库连接</param>
 6         /// <param name="trans">数据库事务</param>
 7         /// <param name="cmdText">SQL语句</param>
 8         /// <param name="cmdParms">传递的参数</param>
 9         private static void PrepareCommand(OracleCommand cmd, OracleConnection conn,
10         OracleTransaction trans, string cmdText, OracleParameter[] cmdParms)
11         {
12             if (conn.State != ConnectionState.Open)
13                 conn.Open();
14             cmd.Connection = conn;
15             cmd.CommandText = cmdText;
16             if (trans != null)
17                 cmd.Transaction = trans;
18             cmd.CommandType = CommandType.Text;
19             if (cmdParms != null)
20             {
21                 foreach (OracleParameter parm in cmdParms)
22                 {
23                     if (parm.Value == null)
24                     {
25                         parm.Value = DBNull.Value;
26                     }
27                     cmd.Parameters.Add(parm);
28                 }
29             }
30         }

应用场景

1.防止多次判断如:

if (dt == null || dt.Rows.Count <= 0) { return; }

只需写作

if (dt == null) { return; }

2.防止引用为null的数据引发异常:

this.dataGridView1.DataSource = dt;

//若dt返回数据行数为零,以下赋值会产生异常

this.dataGridView1.Rows[0].Selected = false;

时间: 2024-10-11 03:05:38

防止查询数据返回数据行为零引起的逻辑判断重复或抛出异常的相关文章

python查询数据库返回数据

python查询数据库返回数据主要运用到flask框架,pymysql 和 json‘插件’ #!/usr/bin/python # -*- coding: UTF-8 -*- import pymysql import flask,json server=flask.Flask(__name__) @server.route('/index',methods=['get','post']) def create(): db = pymysql.connect("localhost",

arttemplate模板引擎有假数据返回数据多层内嵌的渲染方法

1 <!DOCTYPE html> 2 <html lang="en"> 3 4 <head> 5 <meta charset="UTF-8"> 6 <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-sca

MySql 插入数据返回数据的Id值

insert into addeditemgroup(addeditemgroupname) value('11') ; select @@IDENTITY  as id; 返回最新的Id:

PHP上传数据返回数据 unity 测试成功

1.PHP代码不能使用$_GET,要使用$_POST才可以 2.浏览器测试成功!PHP代码,要使用$_GET,不能使用$_POST 3. 4. 5. 6. 7. 8. 9.

用python操作mysql数据库(之数据查询结果返回字典类型)

#!/usr/bin/env python # -*- coding: utf-8 -*- import MySQLdb #建立连接 conn = MySQLdb.connect(host='127.0.0.1',user='root',passwd='1qaz#EDC',db='test_db') cur = conn.cursor(MySQLdb.cursors.DictCursor) #建立游标时,加上"MySQLdb.cursors.DictCursor",让数据查询结果返回字

Atitit.列表页and查询条件的最佳实践(1)------设定搜索条件and提交查询and返回json数据

Atitit.列表页and查询条件的最佳实践(1)------设置查询条件and提交查询and返回json数据 1. 1.?配置条件字段@Conditional 1 1 2. 2.?配置条件字段显示类型为[email protected](displayType?=?displayType.rang,?rangStart?=?rang.start,?rangEnd?=?rang.end,op=op.range) 1 3. #----show  condition  page  list 1 4.

ajax交互servlet返回数据和jdbc模糊查询-中文-已经设置了UTF-8和解决了乱码

1.编码是将字符按一定翻译方式转换成字节存储在内存或外存中,解码是按照一定翻译方式将存储中的字节转换成字符. 2.ASCII是单字节,最高位总为0,相当于只占用了一个字节的7位,2^7=128个字符,相当于键盘上的128个键,有大小写因为字母,有*,%¥#@!+....等这些可显示字符,也有不可以显示的控制符F1,ctr... 而ISO-8859-1是启用了ASCII码的最高位,理论上是能再多128位,实际上没用掉这么多,至于多了那些,你们自己查下表 UTF-8是可变长的,具体中文几个字节,怎么

Atitit.列表页面and条件查询的实现最佳实践(1)------设置查询条件and提交查询and返回json数据

1. 1.?配置条件字段@Conditional 1 1 2. 2.?配置条件字段显示类型为[email protected](displayType?=?displayType.rang,?rangStart?=?rang.start,?rangEnd?=?rang.end,op=op.range) 1 3. #----show  condition  page  list 1 4. 提交条件查询表单by dwr 1 5. @filter  ::   set filter condition 

php查询mysql返回大量数据结果集导致内存溢出的解决方法

web开发中如果遇到php查询mysql返回大量数据导致内存溢出.或者内存不够用的情况那就需要看下MySQL C API的关联,那么究竟是什么导致php查询mysql返回大量数据时内存不够用情况? 答案是: mysql_query 和 mysql_unbuffered_query 两个函数 首先来分析一个典型的实例:在执行下面的代码的时候就会导致php请求mysql返回结果太多(10W以上)导致PHP内存不够用. while ($row = mysql_fetch_assoc($result))