Using被人忽略的用法

8 篇文章 0 订阅


   Using让我这只小菜鸟,今天在这里谈谈他的用法,讲的不好请大家多多指教!

 1 引入命名空间


我们在C#里面用Using引入命名空间,就是vb.net里面的imports的作用是一样的,只是不是一样的语言,但是效果都是一样的。
例如:

Using System.Data.SqlClient


2 用于别名

using别名。using + 别名 = 包括详细命名空间信息的具体的类型。

这种做法有个好处就是当同一个cs引用了两个不同的命名空间,但两个命名空间都包括了一个相同名字的类型的时候。当需要用到这个类型的时候,就每个地方都要用详细命名空间的办法来区分这些相同名字的类型。而用别名的方法会更简洁,用到哪个类就给哪个类做别名声明就可以了。注意:并不是说两个名字重复,给其中一个用了别名,另外一个就不需要用别名了,如果两个都要使用,则两个都需要用using来定义别名的。(这个是我从别人那里引用来的)


3 释放对象


这个东西是我今天主要要讲的内容,Using在代码里面有的初学者,不知道他到底是干嘛的,处于好奇心就将这个Using去掉,发现这段代码,依然可以正确的执行而不报错。这是为什么呢?这个Using又有什么用呢?我就不卖关子了,其实他的作用就是释放一个对象。

例如可以释放一个数据库的连接:

  /// 该方法传入一个查询SQL语句或是存储过程<summary>
        /// 该方法传入一个查询SQL语句或是存储过程
        /// </summary>
        /// <param name="cmtText">SQL查询语句或存储过程</param>
        /// <returns></returns>
        public DataTable ExecuteQuery(string cmtText,CommandType ct)
        {
            DataTable dt = new DataTable();
            cmd = new SqlCommand(cmtText, GetConn());
            cmd.CommandType = ct;
            //关系sdr的同是将会关闭conn
            using (sdr = cmd.ExecuteReader(CommandBehavior.CloseConnection))
            {
                dt.Load(sdr);
            }
            return dt;
        }

这个是可以释放数据库的连接的也关闭了SqlDataReader对象,那么接下来这个这样使用就是错误的代码展示

Imports System.Data.SqlClient
Public Class Form1

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        '定义一个连接数据库的字符串  
        Dim connStr As String
        '这里是链接本地的数据库的字符串  
        connStr = "Data Source=lizhihua-pc;database=newssystem;uid=sa;pwd=123456"
        '定义一个数据库连接的对象()
        Dim conn As SqlConnection
        '实现数据的连接  
        conn = New SqlConnection(connStr)
        conn.Open()
        '定义Sql语句字符串的变量  
        Dim sql As String
        '向数据库中插入数据的Sql语句  
        sql = "insert into category ([name]) values (' 哈哈 ')"
        '定义一个执行Sql语句的对象()
        Dim res As Integer
        Dim cmd As SqlCommand
        cmd = New SqlCommand(sql, conn)
        '目的:释放数据库连接      
        Using (cmd)
            res = cmd.ExecuteNonQuery()
        End Using
        If (conn.State = ConnectionState.Closed) Then
            MsgBox("对象释放成功!")
        Else
            MsgBox("对象释放失败!")
        End If


        '定义一个整数类型的变量,执行完Sql语句所影响的行数  

        '执行Sql语句  

        '判断如果返回的数大于零证明添加成功  
        If res > 0 Then
            MsgBox("添加成功!")
        End If
        '返回这个参数  

    End Sub
End Class

运行的结果就是:

对象释放失败,也就是说Using释放对象的用法,根本也不能释放SqlCommand这个对象,这样的用法就是错误的。


              对于它只是一个小小的细节的问题,但是如果你要是不注意有的时候也会给你带来相应的麻烦,呵呵,不说了,今天我就讲道这里,希望对大家有帮助。谢谢!






评论 52
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值