• 提供系统性能:从数据访问开始


    使用using 语句

    SqlConnection conn = new SqlConnection (connString);
    try 
    {
    conn.Open();
    //省略访问数据库代码.......
    }
    catch(Exception ex)
    {
    throw ex;
    }
    finally
    {
    conn.Close();
    }

    数据库连接通常属于有限的服务器资源,因此要在使用完之后马上关闭。这是提高数据库访问性能的基本方法。在代码中,finally快中调用Close方法释放连接,确保即使有异常发生

    连接也能被释放。除了使用try-catch-finally 语句外,也可以通过使用using 语句来尽快释放资源。

    using 语句两个作用。

    1.作为关键字,using可以导入命名空间。

    2.作为C#语句,using 可以释放对象占用的内存资源,基本语法如下:

    using (SqlConnection conn = new  SqlConnection (connString))
    {
    //数据库操作代码
    }

    using 语句允许用户定义一个范围,并在范围末尾处释放对象,实例中在using语句中定义了一个数据连接对象conn,当程序执行到using 语句末尾时,CLR立即通过调用对象的

    Dispose()方法释放相应的对象。再如:

    using (SqlDataReaderreader=
    com.ExecuteReader(CommandBehavior.CloseConnection) )
    {
    while(reader.Read())
    {
    //遍历获得查询结果
    }
    }

    在利用执行命令对象的ExexuteReader ()方法来获得数据读取器对象时,有一个可选参数,那就是通过指定CommandBehavior.CloseConnection 让数据读取器自动关闭关联

    的连接对象。

    在using 语句内实例化对象,并将对象作用范围限制在using 块中,这是推荐使用的方式。通过它简化了代码,并在一定的程度上提高了资源的使用效率

    using 语句的本质:

    既然using可以释放对象,是不是在所有对象前都可以使用using来限制呢?当然不是!!!

    1.using可以主动释放的对象都需要实现IDisable接口

    2.即使都实现了IDisable接口,也没有必要全部使用using,我们只对那些对系统性能有重要影响的对象进行using限定,而其他的对象可以交给垃圾回收器处理

    参数化命令

    SQL语句 string sql = "insert student values("+student.stuNo+.......")";

    观察上句发现Sq语句具有很多的参数,构建的字符串很复杂。很明显,这种写法至少有以下缺点。

    1.SQL语句不美观,而且容易出现错误。如果在拼接字符串是忘记单引号,小括号,排错是很麻烦的。

    2.安全性差。拼接字符串行成的SQL语句为SQL注入SQL注入攻击提供了温床。

    使用参数化命令

    1.SqlCommand 的 Parameters的集合

    参数化命令是在SQL文本中使用占位符的命令,修改传统的SQL硬编码方式,可以这样写:

    StringBuilder sb = new StringBuilder();
    sb.APPendLine("Insert [Student]");
    sb.APPendLine(" [VALUES]");
    sb.APPendLine("(@StudentNO,@LoginPwd,@StudentName)");

    ADO.NET 命令对象使用一个集合保存离散的参数类型,即SqlCommand对象的Parameters集合。

    用户可以添加任意多的参数对象并映射到SQL语句中的占位符。SqlCommand 类的Parameters集合提供了多种方式传送参数,下面列出常用的几种。

    使用参数名和参数类型进行设置,方法定义如下:

    public Sqlparameter Add (string parameterName, SqlDbtype sqlDbType);
    public Sqlparameter Add (string parameterName,SqlDbType paraValue,int
    size);

    使用SqlParameter 对象进行填充,方法定义如下:

    public SqlParameter Add(SqlParameter value);//添加单个参数
    public void AddRange(SqlParameter [] values);//添加多个参数

    通过Parameters集合的Add方法填充参数集合。例如添加参数“@StudentName”并设置对应的值代码如下:

    com.Parameters.Add("@StudentName",SqlDbType.NVarChar);
    com.Parameters["@StudentName"].Value = studen.studentName;

    调用Add()方法,传入需要填充的参数名称和对应的数据库中该字段的类型,即可设置该参数,调用返回的结果是Sqlparameter对象,通过参数名称找到该对象并设置

    参数值。注意:集合中参数要匹配执行查询的要求,否则可能会导致错误。

    2.使用SqlParameter对象进行填充

    SqlParameter 类提供了许多属性来配置参数,如名字,大小,类型和其他一些如参数传递方向等特性

    属性 说明
    DbType 获取或设置参数的DbType
    Direction 获取或设置一个值,该值指示参数是只可输入,只可输出,还是双向存储过程返回值参数
    IsNullable

    获取或设置一个值,该值指示参数是否接受空值

    ParameterName 获取或设置 SqlParameter的名称
    Siza 获取或设置列中数据的最大值(以字节为单位)
    SqlDbType 获取或设置参数的SqlDbType
    Value 获取或设置该参数的值
  • 相关阅读:
    Java学习之集合(HashSet)
    Java学习之集合(LinkedList链表集合)
    Java学习之集合(List接口)
    Java学习之集合(Collection接口)
    【Spring Session】和 Redis 结合实现 Session 共享
    【NodeJS】nvm
    【Html JS】使用问题记录
    【VUE】使用问题记录
    【RabbitMQ】显示耗时处理进度
    【CentOS7】开发环境配置
  • 原文地址:https://www.cnblogs.com/System-out-println/p/5314466.html
Copyright © 2020-2023  润新知