zoukankan      html  css  js  c++  java
  • 复习数据库开发

    使用查询返回DataReader的时候需要注意,如果关闭了Connection对象,返回的DataReader也会关闭。

    所以如下写法都会出现错误:

      public static OracleDataReader ExecuteQueryDataReader2(string sql)
            {
                using (OracleConnection conn = new OracleConnection(ConnectionString))
                {
                    try
                    {
                        conn.Open();
                        if (conn.State == ConnectionState.Open)
                        {
                            OracleCommand cmd = new OracleCommand();
                            cmd.CommandType = CommandType.Text;
                            cmd.Connection = conn;
                            cmd.CommandText = sql;
                            OracleDataReader dareader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
                            return dareader;
                        }
                    }
                    catch (Exception)
                    {
                        throw;
                    }
                }
                return null;
            }
       

     

     1      /// <summary>
     2         /// 查询,返回OracleDataReader
     3         /// </summary>
     4         /// <param name="sql"></param>
     5         /// <returns></returns>
     6         public static OracleDataReader ExecuteQueryDataReader(string sql)
     7         {
     8             OracleConnection conn = new OracleConnection(ConnectionString);
     9             try
    10             {
    11                 conn.Open();
    12                 if (conn.State == ConnectionState.Open)
    13                 {
    14                     OracleCommand cmd = new OracleCommand();
    15                     cmd.CommandType = CommandType.Text;
    16                     cmd.Connection = conn;
    17                     cmd.CommandText = sql;
    18                     OracleDataReader dareader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
    19                     return dareader;
    20                 }
    21             }
    22             catch (Exception)
    23             {
    24                 throw;
    25             }
    26             finally
    27             {
    28                 if (conn.State != ConnectionState.Closed)
    29                 {
    30                     conn.Close();
    31                 }
    32 
    33             }
    34             return null;
    35         }

    正确写法: 

     1  public static OracleDataReader ExecuteQueryDataReader(string sql)
     2         {
     3             OracleConnection conn = new OracleConnection(ConnectionString);
     4             try
     5             {
     6                 conn.Open();
     7                 if (conn.State == ConnectionState.Open)
     8                 {
     9                     OracleCommand cmd = new OracleCommand();
    10                     cmd.CommandType = CommandType.Text;
    11                     cmd.Connection = conn;
    12                     cmd.CommandText = sql;
    13                     OracleDataReader dareader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
    14                     return dareader;
    15                 }
    16             }
    17             catch (Exception)
    18             {
    19                 conn.Close();
    20                 throw;
    21             }
    22             return null;
    23         }

    调用该方法时需要注意,将返回的DataReader对象关闭,这样同时会关闭Connection对象。

    下面的说法,http://hi.baidu.com/dragonnet/item/db6f22d8a59b8b17d90e44e7

    使用using可以确保连接对象关闭连接。这个我不确定,应该是这样吧。

    1 string connStr = String.Format("server={0};user id={1}; password={2}; database={3}; pooling=false",  @"192.168.8.196", @"robot", @"robot", @"robot");
    2 using(conn = new MySqlConnection(connStr))
    3 {
    4     //Open the connection
    5      conn.Open();
    6    
    7 
    8     //Do somthing useful
    9 }

            在这个实例中,无论块是如何退出的,using子句都会确保关闭数据库连接。查看一下连接类的Dispose()方法的IL代码,它们都检查连接对象的当前状态,如果其状态为打开,就调用Close()方法。浏览.NET程序集的一个强大工具是Reflector(可以从/www.aisto.com/roeder/dotnet/上获得)。这个工具允许查看任何.NET方法的IL代码,还可以把IL代码反编译为源代码,让我们轻松地确定给定的方法的作用。

  • 相关阅读:
    常见算法的时间复杂度
    electron 展示pdf
    AudioContext
    js 计算文字宽度
    python 窗口被关闭报错
    qq行情数据。sina行情JOSN,建议用qq,涨跌,财务数据有-市盈
    python AttributeError: 'NoneType' object has no attribute 'prepare'
    策略日志
    使用Python下载A股行情的几种方法
    easytrader
  • 原文地址:https://www.cnblogs.com/yhlx125/p/3316700.html
Copyright © 2011-2022 走看看