public static SqlDataReader ExcuteRead(string nText, CommandType nType, SqlParameter[] paras)
    {
        SqlConnection conn = new SqlConnection(strConn);
        SqlCommand cmd = new SqlCommand();
        try
        {
            PrepareCommand(conn, cmd, null, nType, nText, paras);
            SqlDataReader dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
            cmd.Parameters.Clear();
            return dr;
        }
        catch (SqlException ex)
        {
            throw new Exception(ex.Message, ex);
        }
    }    public static int ExcuteNonQurey(string nText, CommandType nType, SqlParameter[] paras)
    {
        SqlCommand cmd = new SqlCommand();
        using (SqlConnection conn = new SqlConnection(strConn))
        {
            PrepareCommand(conn, cmd, null, nType, nText, paras);
            int rows = cmd.ExecuteNonQuery();
            cmd.Parameters.Clear();
            return rows;
        }
    }    public static object ExcuteSclare(string nText, CommandType nType, SqlParameter[] paras)
    {
        SqlCommand cmd = new SqlCommand();
        using (SqlConnection conn = new SqlConnection(strConn))
        {
            PrepareCommand(conn, cmd, null, nType, nText, paras);
            object obj = cmd.ExecuteScalar();
            cmd.Parameters.Clear();
            return obj;
        }
    }
这个是别人的代码
问:
他咋不在ExcuteSclare中用TRY -CATCH语句呢?而用了个USING

解决方案 »

  1.   

    using (SqlConnection conn = new SqlConnection(strConn))
    是将数据库的连接引入,否则执行此方法时会报错的。
      

  2.   

    我是说
    为什么就不用TRY - CATCH呢
    而用那个USING难道那个ExcuteSclare不需要捕获异常
      

  3.   

    ExcuteSclare异常似乎会抛出来,在外边捕获就可以了
      

  4.   


    详细点吧
    他哪里有捕获
    这个ExcuteSclare方法就那点还有用这个ExcuteSclare方法需要捕获异常吗
    需要吗
    不需要吗
      

  5.   

    当在某个代码段中使用了类的实例,而希望无论因为什么原因,只要离开了这个代码段就自动调用这个类实例的Dispose。
    要达到这样的目的,用try...catch来捕捉异常也是可以的,但用using也很方便。
    例如:
    using (Class1 cls1 = new Class1(), cls2 = new Class1())
    {
    // the code using cls1, cls2
    } // call the Dispose on cls1 and cls2
    这里触发cls1和cls2的Dispose条件是到达using语句末尾或者中途引发了异常并且控制离开了语句块。 
     
      

  6.   

    1.using指令。using + 命名空间名字,这样可以在程序中直接用命令空间中的类型,而不必指定类型的详细命名空间,类似于Java的import,这个功能也是最常用的,几乎每个cs的程序都会用到。
    例如:using System; 一般都会出现在*.cs中。2.using别名。using + 别名 = 包括详细命名空间信息的具体的类型。
    这种做法有个好处就是当同一个cs引用了两个不同的命名空间,但两个命名空间都包括了一个相同名字的类型的时候。当需要用到这个类型的时候,就每个地方都要用详细命名空间的办法来区分这些相同名字的类型。而用别名的方法会更简洁,用到哪个类就给哪个类做别名声明就可以了。注意:并不是说两个名字重复,给其中一个用了别名,另外一个就不需要用别名了,如果两个都要使用,则两个都需要用using来定义别名的。例如:
    using System;
    using aClass = NameSpace1.MyClass;
    using bClass = NameSpace2.MyClass;namespace NameSpace1 
    {
        public class MyClass 
        {
            public override string ToString() 
            {
                return "You are in NameSpace1.MyClass";
            }
        }
    }namespace NameSpace2 
    {
        class MyClass 
        {
            public override string ToString() 
            {
                return "You are in NameSpace2.MyClass";
            }
        }
    }namespace testUsing
    {
        using NameSpace1;
        using NameSpace2;
        /// <summary>
        /// Class1 的摘要说明。
        /// </summary>
        class Class1
        {
            /// <summary>
            /// 应用程序的主入口点。
            /// </summary>
            [STAThread]
            static void Main(string[] args)
            {
                //
                // TODO: 在此处添加代码以启动应用程序
                //
                
                aClass my1 = new aClass();            
                Console.WriteLine(my1);
                bClass my2 = new bClass();
                Console.WriteLine(my2);
                Console.WriteLine("Press any key");
                Console.Read();
            }
        }
    }
    3.using语句,定义一个范围,在范围结束时处理对象。
    场景:
    当在某个代码段中使用了类的实例,而希望无论因为什么原因,只要离开了这个代码段就自动调用这个类实例的Dispose。
    要达到这样的目的,用try...catch来捕捉异常也是可以的,但用using也很方便。
    例如:
    using (Class1 cls1 = new Class1(), cls2 = new Class1())
    {
    // the code using cls1, cls2
    } // call the Dispose on cls1 and cls2
    这里触发cls1和cls2的Dispose条件是到达using语句末尾或者中途引发了异常并且控制离开了语句块
      

  7.   

    using()
    只能保证对象会被进行关闭、释放资源。而用try...catch能处理各种异常情况
      

  8.   

    try
    {ExcuteSclare();}
    catch(Exception e)
    {//这里可以捕获到ExcuteSclare中的异常吧??
    MessageBox.Show(e.Message);
    }
      

  9.   

    如果你不想处理就不需要trycatch来处理异常情况,
      

  10.   

    使用using()必须实现IDisposable接口,使用后自动会调用Dispose()方法,所以不用担心资源的释放,相当于
    try{}finnally{*.Dispose();}
    另外:
            catch (SqlException ex)
            {
                throw new Exception(ex.Message, ex);
            }
    这个代码是不规范的:
    改成:
    catch
    {
        throw;
    }
      

  11.   

    ExcuteSclare
    ExcuteSclare
    ExcuteSclare
    ExcuteSclare
    ExcuteSclare
    ExcuteSclare明白了一点代码是别人写的
    其实我的意思是
    ExcuteSclare这个这个是这个方法中为什么不用try-catch语句
    而用了using
    我知道ExcuteSclare中using的意思是“只要离开了这个代码段就自动调用这个类实例的Dispose”
    也就是关闭连接不用try-catch
    是不需要抛出异常吗还是他没有编写上?
      

  12.   

    代码不是我写的我是个新手嘛刚开始学习那就是像处理可能发生的异常就加try不像处理就是不加这个语句吧恩···貌似是这个道理
      

  13.   

    using () 和 try catch 互不干扰啊,没有相互替代性,不是说不共戴天。
    用不用 try catch 就是异常处理(Execption Handling)的问题了,有其他的指导原则。
    比如尽量不要随便吞掉异常(catch 了而不作处理,单纯为了不向用户显示警告框),不要在出错信息中暴露文件路径等敏感信息什么的。