SqlHelper详解

合集下载

ASPNET中的数据库操作类sqlhelper及方法使用指南

ASPNET中的数据库操作类sqlhelper及方法使用指南

要在VS2005中使用sqlhelper类,必须把Microsoft.ApplicationBlocks.Data.dll引用到项目中.1.通过存储过程查询的方法SqlHelper.ExecuteDataset(数据库连接字符, 存储过程字符, 参数数组);2.通过字符串查询的方法SqlHelper.ExecuteDataset(数据库连接字符, CommandType.Text , 查询字符串,参数数组);3.通过存储过程插入的方法SqlHelper.ExecuteScalar(数据库连接字符, 存储过程字符, 参数数组);4.通过字符串插入的方法SqlHelper.ExecuteScalar(数据库连接字符, CommandType.Text , 插入及刷新字符串,参数数组);5.通过存储过程刷新的方法SqlHelper.ExecuteNonQuery(数据库连接字符, 存储过程字符, 参数数组);6.通过字符串刷新的方法SqlHelper.ExecuteNonQuery(数据库连接字符, CommandType.Text , 刷新字符串,参数数组);运用实例??using System;using System.Data;using System.Data.SqlClient;using Microsoft.ApplicationBlocks.Data;using System.IO;namespace SK.VideoDAL{?/// <summary>?/// File 的摘要说明。

?/// </summary>?public class File?{/// <summary>/// 文件数据访问类/// </summary>public File(){//// TODO: 在此处添加构造函数逻辑//}/// <summary>/// 添加文件/// </summary>/// <param name="FileClassID">文件分类编号</param>/// <param name="SetCommend">推荐方式</param>/// <param name="SetTop">固顶方式</param>/// <param name="Name">文件名称</param>/// <param name="Intro">简介</param>/// <param name="FileSize">大小</param>/// <param name="Grade">评级</param>/// <param name="Keyword">关键字</param>/// <param name="PreviewUrl">预览图地址</param>/// <param name="MemberID">发布人ID</param>/// <param name="FileTypeID">文件类别编号</param>/// <param name="DownRequire">下载要求</param>/// <param name="NeedPoint">下载所需点数</param>/// <param name="Status">状态</param>public object Add(object FileClassID,object SetCommend,object SetTop,object Name,object Intro,object FileSize,object Grade,object Keyword,object PreviewUrl,object MemberID,object FileTypeID,object DownRequire,object NeedPoint,object Status,object Actor,object Level,object Region){SqlParameter[] oParms = new SqlParameter[17];oParms[0]=new SqlParameter("@FileClassID",FileClassID);oParms[1]=new SqlParameter("@SetCommend",SetCommend);oParms[2]=new SqlParameter("@SetTop",SetTop);oParms[3]=new SqlParameter("@Name",Name);oParms[4]=new SqlParameter("@Intro",Intro);oParms[5]=new SqlParameter("@FileSize",FileSize);oParms[6]=new SqlParameter("@Grade",Grade);oParms[7]=new SqlParameter("@Keyword",Keyword);oParms[8]=new SqlParameter("@PreviewUrl",PreviewUrl);oParms[9]=new SqlParameter("@MemberID",MemberID);oParms[10]=new SqlParameter("@FileTypeID",FileTypeID);oParms[11]=new SqlParameter("@DownRequire",DownRequire);oParms[12]=new SqlParameter("@NeedPoint",NeedPoint);oParms[13]=new SqlParameter("@Status",Status);oParms[14]=new SqlParameter("@Actor",Actor);oParms[15]=new SqlParameter("@Level",Level);oParms[16]=new SqlParameter("@Region",Region);return SqlHelper.ExecuteScalar(Data.ConnString, CommandType.Text ,"INSERT INTO [File] ( [FileClassID], SetCommend,SetTop,[Name],[Intro], [FileSize], [Grade], [Keyword], [PreviewUrl], MemberID,FileTypeID,[CreateTime], [UpdateTime],Downloads,Hits,DownRequire,NeedPoint,Status,Actor,[Level],Region) VALUES(@FileClassID,@SetCommend,@SetTop,@Name,@Intro,@FileSize,@Grade, @Keyword,@PreviewUrl,@MemberID,@FileTypeID,getdate(),getdate(),0,0,@DownRe quire,@NeedPoint,@Status,@Actor,@Level,@Region); select @@IDENTITY", oParms);}/// <summary>/// 更新指定的文件信息/// </summary>/// <param name="FileID">文件编号</param>/// <param name="FileTypeID">文件类别编号</param>/// <param name="FileClassID">文件分类编号</param>/// <param name="SetCommend">推荐方式</param>/// <param name="SetTop">固顶方式</param>/// <param name="Name">文件名称</param>/// <param name="Intro">简介</param>/// <param name="FileSize">大小</param>/// <param name="Grade">评级</param>/// <param name="Keyword">关键字</param>/// <param name="PreviewUrl">预览图地址</param>/// <param name="DownRequire">下载要求</param>/// <param name="NeedPoint">下载所需点数</param>/// <param name="Status">状态</param>public void Update(object FileID,object FileTypeID,object FileClassID,object SetCommend,object SetTop,object Name,object Intro,object FileSize,object Grade,object Keyword,object PreviewUrl, object DownRequire,object NeedPoint,object Status,object Actor,object Level,object Region){SqlParameter[] oParms = new SqlParameter[17];oParms[0]=new SqlParameter("@FileID",FileID);oParms[1]=new SqlParameter("@FileTypeID",FileTypeID);oParms[2]=new SqlParameter("@FileClassID",FileClassID);oParms[3]=new SqlParameter("@SetCommend",SetCommend);oParms[4]=new SqlParameter("@SetTop",SetTop);oParms[5]=new SqlParameter("@Name",Name);oParms[6]=new SqlParameter("@Intro",Intro);oParms[7]=new SqlParameter("@FileSize",FileSize);oParms[8]=new SqlParameter("@Grade",Grade);oParms[9]=new SqlParameter("@Keyword",Keyword);oParms[10]=new SqlParameter("@PreviewUrl",PreviewUrl);oParms[11]=new SqlParameter("@DownRequire",DownRequire);oParms[12]=new SqlParameter("@NeedPoint",NeedPoint);oParms[13]=new SqlParameter("@Status",Status);oParms[14]=new SqlParameter("@Actor",Actor);oParms[15]=new SqlParameter("@Level",Level);oParms[16]=new SqlParameter("@Region",Region);SqlHelper.ExecuteNonQuery(Data.ConnString, CommandType.Text," update [File] set FileTypeID=@FileTypeID,FileClassID=@FileClassID,SetCommend=@SetCommend,Se tTop=@SetTop,[Name]=@Name,Intro=@Intro,FileSize=@FileSize,Grade=@Grade,Key word=@Keyword,PreviewUrl=@PreviewUrl,UpdateTime=getdate(),DownRequire=@。

Android:SQLiteOpenHelper类(SQLlite数据库操作)详细解析

Android:SQLiteOpenHelper类(SQLlite数据库操作)详细解析

Android:SQLiteOpenHelper类(SQLlite数据库操作)详细解析前⾔SQLite数据库操作在Android开发中⾮常常⽤今天我将带⼤家全⾯了解关于SQLite数据库的操作(增、删、查、改)⽬录1. SQLite数据库介绍SQLite是Android内置的⼀个⼩型、关系型、属于⽂本型的数据库。

Android提供了对 SQLite数据库的完全⽀持,应⽤程序中的任何类都可以通过名称来访问任何的数据库,但是应⽤程序之外的就不能访问。

Android中,通过SQLiteOpenHelper类来实现对SQLite数据库的操作。

2. SQLiteOpenHelper类介绍定义:SQLiteOpenHelper是⼀个辅助类作⽤:管理数据库(创建、增、修、删) & 版本的控制。

使⽤过程:通过创建⼦类继承SQLiteOpenHelper类,实现它的⼀些⽅法来对数据库进⾏操作。

在实际开发中,为了能够更好的管理和维护数据库,我们会封装⼀个继承⾃SQLiteOpenHelper类的数据库操作类,然后以这个类为基础,再封装我们的业务逻辑⽅法。

SQLiteOpenHelper类的数据库操作⽅法介绍⽅法名作⽤备注onCreate()创建数据库创建数据库时⾃动调⽤onUpgrade()升级数据库close()关闭所有打开的数据库对象execSQL()可进⾏增删改操作, 不能进⾏查询操作query()、rawQuery()查询数据库insert()插⼊数据delete()删除数据getWritableDatabase()创建或打开可以读/写的数据库通过返回的SQLiteDatabase对象对数据库进⾏操作getReadableDatabase()创建或打开可读的数据库同上3. 常见数据库使⽤数据库操作⽆外乎:“增删查改”:1. 对于“增、删、改(更新)”这类对表内容变换的操作,需先调⽤getWritableDatabase()获得⼀个可写数据库对象,在执⾏的时候调⽤通⽤的execSQL(String sql)或或对应的操作API⽅法:insert()、delete()、update()2. 对“查”,需要调⽤getReadableDatabase()获得⼀个可读的数据库对象,然后使⽤query()或rawQuery()⽅法查询数据库不能使⽤execSQL⽅法下⾯我将⼀⼀介绍。

sqlhelper 参数化语句

sqlhelper 参数化语句

sqlhelper 参数化语句
摘要:
1.简介
2.sqlhelper 的作用
3.参数化语句的使用
4.参数化语句的优势
5.总结
正文:
SQLHelper 是一个帮助简化SQL 语句编写的工具,特别是在处理参数化语句时。

参数化语句是一种将变量嵌入到SQL 语句中的方法,这样可以防止SQL 注入攻击,提高代码的安全性和可维护性。

sqlhelper 的主要作用是提供一种更加安全和便捷的方式来编写SQL 语句,特别是在处理参数化语句时。

使用sqlhelper 可以避免手动编写复杂的参数化语句,减少出错的可能性,提高开发效率。

参数化语句的使用是十分方便的,只需要在SQL 语句中使用相应的占位符来表示参数,例如:`SELECT * FROM users WHERE username = ? AND password = ?`。

然后,在执行查询时,将参数的值传递给sqlhelper,它将自动处理参数的绑定和查询执行。

参数化语句的优势是显而易见的。

首先,它能够有效防止SQL 注入攻击,提高应用程序的安全性。

其次,参数化语句使得代码更加简洁和易于维护,因为它们可以减少SQL 语句的编写和调试工作。

总的来说,sqlhelper 是一个十分有用的工具,特别是在处理参数化语句时。

SqlHelper带详细中文注释

SqlHelper带详细中文注释

SqlHelper带详细中⽂注释1using System;2using System.Collections.Generic;3using System.Linq;4using System.Text;5//对数据库进⾏操作引⼊命名空间6using System.Data;7using System.Data.SqlClient;8using System.Configuration;91011namespace DAL12 {13public class SQLhelper14 {151617///变量定义<summary>18///</summary>19private SqlConnection conn = null;20private SqlCommand cmd = null;21private SqlDataReader sdr = null;2223/// SQLhelper connStr 字符串的连接<summary>24///</summary>250401126public SQLhelper()27 {28string connStr = ConfigurationManager.ConnectionStrings["connStr"].ConnectionString; //连接SQL数据表29 conn = new SqlConnection(connStr); //连接通道3031 }32333435///获取conn<summary>36///</summary>37///<returns>为什么要这样写有什么意义呢?</returns>38private SqlConnection GetConn()39 {40if (conn.State == ConnectionState.Closed) //-判断当前连接的状态如果当前的连接是关闭状态的话结果为True41 {42 conn.Open(); //-打开数据库43 }4445return conn; //返回结果46 }4748495051///该⽅法传⼊⼀个增删改SQL语句或是存储过程<summary>52///</summary>53///<param name="sql">要执⾏的增删改SQL语句或是存储过程</param>54///<returns>返回更新的记录数</returns>55public int ExecuteNonQuery(string cmdText,CommandType ct)56 {57//-执⾏⾮查询⽐如说 insert Updata Delect58//不定义的时候返回的初值是零59int res;60try61 {62//-1、将预见可能引发异常的代码包含在try语句块中。

SqlHelp详解

SqlHelp详解

SqlHelp详解SqlHelper 类实现详细信息SqlHelper 类用于通过一组静态方法来封装数据访问功能。

该类不能被继承或实例化,因此将其声明为包含专用构造函数的不可继承类。

在 SqlHelper 类中实现的每种方法都提供了一组一致的重载。

这提供了一种很好的使用 SqlHelper 类来执行命令的模式,同时为开发人员选择访问数据的方式提供了必要的灵活性。

每种方法的重载都支持不同的方法参数,因此开发人员可以确定传递连接、事务和参数信息的方式。

在 SqlHelper 类中实现的方法包括:ExecuteNonQuery。

此方法用于执行不返回任何行或值的命令。

这些命令通常用于执行数据库更新,但也可用于返回存储过程的输出参数。

ExecuteReader。

此方法用于返回 SqlDataReader 对象,该对象包含由某一命令返回的结果集。

ExecuteDataset。

此方法返回 DataSet 对象,该对象包含由某一命令返回的结果集。

ExecuteScalar。

此方法返回一个值。

该值始终是该命令返回的第一行的第一列。

ExecuteXmlReader。

此方法返回 FOR XML 查询的 XML 片段。

除了这些公共方法外,SqlHelper 类还包含一些专用函数,用于管理参数和准备要执行的命令。

不管客户端调用什么样的方法实现,所有命令都通过 SqlCommand 对象来执行。

在 SqlCommand 对象能够被执行之前,所有参数都必须添加到 Parameters 集合中,并且必须正确设置 Connection、CommandType、CommandText 和 Transaction 属性。

SqlHelper 类中的专用函数主要用于提供一种一致的方式,以便向 SQL Server 数据库发出命令,而不考虑客户端应用程序调用的重载方法实现。

SqlHelper 类中的专用实用程序函数包括:AttachParameters:该函数用于将所有必要的 SqlParameter 对象连接到正在运行的 SqlCommand。

sqlhelper的用法

sqlhelper的用法

sqlhelper的用法SQLhelper是一个工具类,用于简化与数据库的交互操作。

它主要提供了一些通用的方法,用于执行SQL语句、查询数据等。

使用SQLhelper,需要先创建一个SQLhelper对象。

可以通过以下方式创建:1. 创建一个数据库连接:```SqlConnection connection = newSqlConnection(connectionString);```其中,`connectionString`是连接数据库的字符串,包括数据库服务器地址、用户名、密码等信息。

2. 创建一个SQLhelper对象:```SQLhelper sqlHelper = new SQLhelper(connection);```传入数据库连接对象作为参数。

创建SQLhelper对象后,就可以使用它提供的方法来执行SQL 语句了。

以下是一些常用的方法:1. 执行SQL语句(增删改操作):```int rowsAffected = sqlHelper.ExecuteNonQuery(sql);```其中,`sql`是要执行的SQL语句,`rowsAffected`是受影响的行数。

2. 执行SQL语句(查询操作):```DataTable result = sqlHelper.ExecuteDataTable(sql);```其中,`sql`是要执行的SQL语句,`result`是查询结果,以DataTable的形式返回。

3. 执行SQL语句(查询操作,返回单个值):```object result = sqlHelper.ExecuteScalar(sql);```其中,`sql`是要执行的SQL语句,`result`是查询结果的第一行第一列的值。

4. 执行带参数的SQL语句:```SqlParameter[] parameters = new SqlParameter[]{new SqlParameter("@Param1", value1),new SqlParameter("@Param2", value2),// ...};int rowsAffected = sqlHelper.ExecuteNonQuery(sql, parameters); ```其中,`parameters`是参数数组,`@Param1`、`@Param2`等是SQL语句中的参数名。

使用SqlHelper的一个小技巧

使⽤SqlHelper的⼀个⼩技巧在数据库设计时,也许会有⼀些约定,说⼀下我⾃⼰的三点基本硬性规定:1、所有字段都为可空设定(主键、布尔类型字段除外)2、字符串类型不允许有前后空格(可能特殊情况时除外)3、如果是空字符串,则应存储Null(为了防⽌不同数据库类型对字符串为空和NULL的不同对待)第⼀点是设计时的事情,在这⾥可以略过,⽽后两点则是归程序判断处理的,也许细⼼的你发现了,第⼆点和第三点是衔接的。

接下来我们来看⼀下后两点是如何实现的,以TextBox为例,我是这样进⾏的:'在验证数据时进⾏Me.txtRemark.Trim()'在保存时进⾏With infoIf (Me.txtRemark.HasValue) Then.Remark = Me.txtRemark.TextElse.Remark = NothingEnd IfEnd With这段代码并不难理解,不过需要说明的是,必填的字段为了验证是否有值Trim是得有的,⽽不必填的字段实质上则只需要赋值的那⼀⾏,Trim和Null则可以交由底层SqlHelper⾥进⾏处理。

⾸先我们定义⼀个配置类来进⾏控制:'''<summary>''' Database configuration'''</summary>Friend NotInheritable Class Config' Removes all occurrences of white space charactersPublic Shared ReadOnly TrimString As Boolean = True' translate the empty string to nullPublic Shared ReadOnly EmptyStringToNull As Boolean = True' translate the null boolean to falsePublic Shared ReadOnly NullBooleanToFalse As Boolean = True' translate the null value to dbnull valuePublic Shared ReadOnly NullValueToDBNull As Boolean = TrueEnd Class前三项正是我们要实现的功能的开关,⽽最后⼀项NullValueToDBNull则需要另外说明⼀下了:在实体类中,值类型我都是⽤Nullable(Of T)来存储的,这当中就包含了Null的情况,⽽在传递⾄数据库时,Null是作为默认值还是DBNull 呢?这是不确定的,所以这个开关就是⽤于约定Null作为DBNull处理。

sqlhelper知识点总结

sqlhelper知识点总结
SQLHelper是一个用于帮助执行SQL语句的工具类。

它封装
了一些常用的数据库操作,使得执行SQL语句变得更加简洁
和方便。

以下是SQLHelper的主要知识点总结:
1. 数据库连接:SQLHelper可以通过提供连接字符串来连接到
数据库。

连接字符串包含数据库服务器的名称、数据库名称、用户名和密码等信息。

2. 执行SQL语句:SQLHelper可以执行各种SQL语句,包括
查询、插入、更新和删除等。

它可以执行单个SQL语句,也
可以执行多个SQL语句的批处理操作。

3. 参数化查询:SQLHelper支持参数化查询,可以通过参数来
动态设置SQL语句中的值,以避免SQL注入攻击,并提高查
询的性能。

4. 数据库事务:SQLHelper可以支持数据库事务操作。

事务是
一系列数据库操作的逻辑单元,可以保证数据库操作的原子性,一致性和隔离性。

5. 数据库连接池:SQLHelper可以使用连接池来提高数据库操
作的性能。

连接池维护了一组预先创建好的数据库连接,可以重复使用,避免了频繁创建和关闭连接的开销。

6. 异常处理:SQLHelper可以处理数据库操作中的异常。

它可
以捕获并处理数据库连接失败、SQL语法错误和执行异常等
异常情况。

总的来说,SQLHelper是一个简化数据库操作的工具类,它封装了数据库连接、SQL语句执行、参数化查询、事务管理、连接池和异常处理等功能,可以提高数据库操作的效率和可靠性。

sql中merge的用法

SQL中MERGE的用法简介在SQL中,MERGE是一种用于合并(或称为“融合”)数据的命令。

它可以根据指定的条件将源数据合并到目标表中。

MERGE命令在很多数据库管理系统中都得到了支持,如Oracle、SQL Server等。

MERGE命令的作用是根据指定的条件,判断源数据与目标表中的数据是否匹配,如果匹配则更新目标表中的数据,如果不匹配则将源数据插入到目标表中。

语法MERGE命令的语法如下:MERGE INTO target_tableUSING source_tableON conditionWHEN MATCHED THENUPDATE SET column1 = value1, column2 = value2, ...WHEN NOT MATCHED THENINSERT (column1, column2, ...)VALUES (value1, value2, ...)其中,target_table是目标表,source_table是源表,condition是指定的条件。

WHEN MATCHED子句用于指定当源数据与目标表中的数据匹配时执行的操作,通常是更新操作。

WHEN NOT MATCHED子句用于指定当源数据与目标表中的数据不匹配时执行的操作,通常是插入操作。

示例下面通过一个示例来演示MERGE命令的使用。

假设有两张表customers和orders,它们的结构如下:CREATE TABLE customers (customer_id INT PRIMARY KEY,customer_name VARCHAR(100),customer_address VARCHAR(200));CREATE TABLE orders (order_id INT PRIMARY KEY,customer_id INT,order_date DATE,order_amount DECIMAL(10, 2));现在我们需要将一张临时表temp_orders中的数据合并到orders表中,如果temp_orders中的数据在orders表中不存在,则插入到orders表中;如果temp_orders中的数据在orders表中已存在,则更新orders表中对应的数据。

sqlhelper编写

SQLHelper是一个用于简化数据库操作的工具类,可以帮助开发人员快速地执行常见的数据库操作,如插入、更新、删除和查询等。

以下是一个简单的SQLHelper类的示例代码,仅供参考:```javaimport java.sql.Connection;import java.sql.DriverManager;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;public class SQLHelper {private static final String DB_URL = "jdbc:mysql://localhost:3306/mydatabase";private static final String USERNAME = "root";private static final String PASSWORD = "password"; private static Connection conn = null;private static PreparedStatement pstmt = null;private static ResultSet rs = null;public static void connect() {try {conn = DriverManager.getConnection(DB_URL, USERNAME, PASSWORD);} catch (SQLException e) {e.printStackTrace();}}public static void close() {try {if (rs != null) {rs.close();}if (pstmt != null) {pstmt.close();}if (conn != null) {conn.close();}} catch (SQLException e) {e.printStackTrace();}}public static ResultSet query(String sql) {try {pstmt = conn.prepareStatement(sql);rs = pstmt.executeQuery();return rs;} catch (SQLException e) {e.printStackTrace();return null;}}public static int update(String sql) {try {pstmt = conn.prepareStatement(sql);int rowsAffected = pstmt.executeUpdate(); return rowsAffected;} catch (SQLException e) {e.printStackTrace();return -1; }}}```。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

SqlHelper详解(转载)SqlHelper 类实现详细信息SqlHelper 类用于通过一组静态方法来封装数据访问功能。

该类不能被继承或实例化,因此将其声明为包含专用构造函数的不可继承类。

在 SqlHelper 类中实现的每种方法都提供了一组一致的重载。

这提供了一种很好的使用SqlHelper 类来执行命令的模式,同时为开发人员选择访问数据的方式提供了必要的灵活性。

每种方法的重载都支持不同的方法参数,因此开发人员可以确定传递连接、事务和参数信息的方式。

在 SqlHelper 类中实现的方法包括:ExecuteNonQuery。

此方法用于执行不返回任何行或值的命令。

这些命令通常用于执行数据库更新,但也可用于返回存储过程的输出参数。

ExecuteReader。

此方法用于返回 SqlDataReader 对象,该对象包含由某一命令返回的结果集。

ExecuteDataset。

此方法返回 DataSet 对象,该对象包含由某一命令返回的结果集。

ExecuteScalar。

此方法返回一个值。

该值始终是该命令返回的第一行的第一列。

ExecuteXmlReader。

此方法返回 FOR XML 查询的 XML 片段。

除了这些公共方法外,SqlHelper 类还包含一些专用函数,用于管理参数和准备要执行的命令。

不管客户端调用什么样的方法实现,所有命令都通过 SqlCommand 对象来执行。

在SqlCommand 对象能够被执行之前,所有参数都必须添加到 Parameters 集合中,并且必须正确设置 Connection、CommandType、CommandText 和 Transaction 属性。

SqlHelper 类中的专用函数主要用于提供一种一致的方式,以便向 SQL Server 数据库发出命令,而不考虑客户端应用程序调用的重载方法实现。

SqlHelper 类中的专用实用程序函数包括:AttachParameters:该函数用于将所有必要的 SqlParameter 对象连接到正在运行的SqlCommand。

AssignParameterValues:该函数用于为 SqlParameter 对象赋值。

PrepareCommand:该函数用于对命令的属性(如连接、事务环境等)进行初始化。

ExecuteReader:此专用 ExecuteReader 实现用于通过适当的 CommandBehavior 打开SqlDataReader 对象,以便最有效地管理与阅读器关联的连接的有效期。

SqlHelper体验谈:以下载自CEOCIO(MVP/CSDN_WEB开发版主)的Blog():微软提供的Data Access Application Block中的SQLHelper类中封装了最常用的数据操作,各个使用者调用他而写的代码也有很大区别。

对于一个返回DataSet的方法我原来是这样写的:[复制到剪贴板]CODE:public DataSet GetDepartmentMemberList(int departmentID){try{string sql = "OA_Department_GetDepartment_Members";string conn = ConfigurationSettings.AppSettings["strConnection"];SqlParameter[] p ={SqlHelper.MakeInParam("@departmentID",SqlDbType.Int,4,departmentID)};DataSet ds = SqlHelper.ExecuteDataset(conn,CommandType.StoredProcedure,sql,p);return ds;}catch(System.Data.SqlClient.SqlException er){throw new Exception(er.Message);}}现在我是这样来写的://连接字符串[复制到剪贴板]CODE:private string _connectionString = ConfigurationSettings.AppSettings["strConnection"];public string ConnectionString{get {return this._connectionString;}set {this._connectionString = value;}}public DataSet GetNewsToIndexPage(int NewsTypeID){return GetDataSet("yzb_GetNewsToIndexPage",GetNewsToIndexPage_Parameters(NewsTypeID));}//设置存储过程参数[复制到剪贴板]CODE:private SqlParameter[] GetNewsToIndexPage_Parameters(int NewsTypeID){SqlParameter[] p ={SqlHelper.MakeInParam("@NewsTypeID",SqlDbType.Int,4,NewsTypeID)return p;}//这里才真正调用SqlHelper[复制到剪贴板]CODE:private DataSet GetDataSet(string sql, params SqlParameter[] p){return SqlHelper.ExecuteDataset(ConnectionString,CommandType.StoredProcedure,sql,p);}代码更加灵活,更加安全了:P做为一个懒人,大笨狼51aspx我经常这样写:[复制到剪贴板]CODE:System.Data.DataTable dt=SqlHelper.ExecuteDataset(SqlHelper.CONN_STRING_NON_DTC,CommandType.Text,sql).Tables[0];直接返回DataTable,返回表集合基本不用,只返回一个table用于绑定。

string conn = ConfigurationSettings.AppSettings["strConnection"];我写在SqlHelper.CONN_STRING_NON_DTC里面MakeInParam代码烦琐,如果查询输入条件不可能有组合SQL,我直接exec pronamr paraargs如果查询输入条件存在安全问题,或者带返回参数再用[复制到剪贴板]CODE:SqlParameter[] queryParam=new SqlParameter[] {new SqlParameter("@UserID",SqlDbType.Int)};queryParam[0].Value=erID;组合sql语句用到@和string.Format技巧.例如:[复制到剪贴板]CODE:sql=@"UPDATE Test_User_StatisticSETTest_User_Statistic.[IsQualified]={0},Test_User_Statistic.[Reason]='{1}'WHERE UserID={2}" ;sql= string.Format(sql,IsQualified,Reason,userID);SqlHelper.ExecuteNonQuery(SqlHelper.CONN_STRING_NON_DTC,CommandType.Text,sql);其中sql语句可以借助SQL的查询分析器生成。

这么干要保证安全,如果有输入漏洞,建议还是用SqlParameter[]缓存参数,因为它会把攻击性的代码,比如带单引号分号的,当作普通字符处理。

Enterprise Library: Data Access Application Block使用向导2007年09月25日星期二下午 04:20Data Access Application Block有如下好处:l减少编写重复累赘代码去执行标准的任务。

l帮助在应用程序内部和跨企业应用维护一致的数据访问实践。

l降低改变物理数据目标的难度。

l减轻开发人员学习不同数据库类型的不同编程模型。

l当移植应用程序到不同数据库类型时,减少重写代码的数量。

Data Access Application Block依赖项:l Data Access Application Block依赖其他的application blocks和Enterprise Library 中的代码。

l Configuration Application Block – Data Access Application Block使用该Configuration Application Block读取配置信息。

l Common类库功能,如instrumentation –提供不同功能用来显示事件和系统管理的数据。

l此外,application block使用XML文件存放配置信息,推荐采用Enteprise Library配置工具来修改这些配置信息。

使用Enteprise Library配置工具创建配置文件:创建DemoDAAP应用程序,使用Configuration Console配置app.config文件。

应注意Connection String的设置,在本示例中,设置Integrated Security为False,并添加User ID和Password 参数及其参数值,Database属性值为Northwind。

选择合适的重载方法每一个数据访问方法均有许多重载,如下的描述和指导帮助你选择合适的重载:l一些重载方法接受DBCommandWrapper对象,DBCommandWrapper在一个对象内同时封装了command和参数。

允许你同时增加输入/输出参数和设置这些参数的类型。

这些重载提供了很好的灵活性和对每一个方法的控制。

l一些重载方法接受存储过程和存储过程参数集合,当调用仅有输入参数的存储过程时,调用这些重载比较方便。

l一些重载方法接受mandType和字符串命令,当执行在线的SQL语句或没有参数的存储过程时,调用这些重载比较方便。

相关文档
最新文档