使用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 获取或设置该参数的值