dbhelpersql数据操作类dbhelper.cs
MyQQ文档
MyQQ聊天工具一、需求描述某公司出于网络安全考虑,不允许使用QQ、MSN等网络聊天工具,为了提高员工间间的沟通效率,公司决定开发一套内部使用的实时聊天工具MyQQ。
项目调研期间,通过与该公司领导的面谈,并做出总结和归纳之后,他们需要软件具备以下功能:1.用户注册要使用本聊天工具,必须具备一个MyQQ号码,通过注册功能填写昵称、年龄、性别、密码,由系统自动生成一个MyQQ号码,号码从10000开始,依次递增。
注册时,真实姓名、星座、血型作为选填资料。
2.用户登录要使用本系统必须先登录。
登录的时候需要输入正确的MyQQ号码和密码。
3.个人信息编辑用户登录后,可以修改自己的个人信息。
个人信息分为两部分:个人资料和安全设置。
1)个人资料个人资料包括用户号码(不可修改)、用户昵称、性别、真实姓名、年龄、星座、血型。
其中星座、血型需要提供列表进行选择。
2)安全设置安全设置是身份验证条件设置。
身份验证条件包括3个:允许任何人加我为好友,需要身份验证才能加我为好友,不允许任何人加我为好友。
用户注册后默认的是允许任何人加我为好友。
4.查找/添加好友1)查找好友查找分为通过QQ号码查找和昵称查找。
2)添加好友在查找的结果中选择一个用户,可以添加他为自己的好友。
要求不能添加自己为好友,已经是好友的不能重复添加。
5.聊天双击好友的qq号码,弹出聊天窗口,即可进行聊天。
6.其他要求1)建议使用的技术本软件使用WinForms+技术来实现。
2)数据库使用 SQL Server 2005 数据库。
二、开发环境开发工具:Visual Studio 2008、SQL Server 2005。
三、需求分析1.使用 SQL Server 设计数据库表(1)Users:用户表。
(2)Friends:好友表。
(3)Star:星座表。
(4)BloodType:血型表。
(5)FriendshipPolicy:好友策略表。
(6)Messages:消息表。
SqlServerDBHelper类
SqlServerDBHelper类using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Data;using System.Data.SqlClient;namespace DAL{/// <summary>/// 连接数据库类/// </summary>public class SqlServerDBHelper{/// <summary>/// 连接数据库/// </summary>/// <returns></returns>public static SqlConnection GetConnection(){string conString = System.Configuration.ConfigurationManager.ConnectionStrings["connstring"].ToString();//定义连接数据库字符集 return new SqlConnection(conString);//返回连接数据库对象}/// <summary>/// ⽤数据填充的⽅法查询/// </summary>/// <param name="type"></param>/// <param name="sql"></param>/// <param name="pares"></param>/// <returns></returns>public DataSet GetDataSet(CommandType type, string sql, params SqlParameter[] pares){SqlConnection con = GetConnection();DataSet ds = new DataSet();SqlDataAdapter da = new SqlDataAdapter(sql, con);mandType = type;if (pares != null){foreach (SqlParameter pare in pares){da.SelectCommand.Parameters.Add(pare);}}da.Fill(ds);return ds;}public DataSet GetDataSet(string sql, params SqlParameter[] pares){return GetDataSet(CommandType.Text, sql, pares);}public SqlDataReader GetSqlDataReader(CommandType type, string sql,out SqlConnection con, params SqlParameter[] pares){con = GetConnection();SqlCommand cmd = new SqlCommand(sql, con);mandType = type;con.Open();if (pares != null){foreach (SqlParameter pare in pares){cmd.Parameters.Add(pare);}}return cmd.ExecuteReader(CommandBehavior.CloseConnection);}public SqlDataReader GetSqlDataReader(string sql,out SqlConnection con, params SqlParameter[] pares) {return GetSqlDataReader(CommandType.Text, sql,out con, pares);}public bool MidfyDB(CommandType type, string sql, params SqlParameter[] pares){bool falg = false;SqlConnection con = GetConnection();SqlCommand cmd = new SqlCommand(sql, con);mandType = type;if (pares != null){foreach (SqlParameter pare in pares){cmd.Parameters.Add(pare);}}SqlTransaction trans = null;try{con.Open();trans = con.BeginTransaction();cmd.Transaction = trans;cmd.ExecuteNonQuery();mit();falg = true;}catch (Exception e){trans.Rollback();throw e;}finally{con.Close();}return falg;}public bool MidfyDB(string sql, params SqlParameter[] pares){return MidfyDB(CommandType.Text, sql, pares);}/// <summary>/// 查询聚合函数类/// </summary>/// <param name="type">数据库操作的类型如:StoredProcedure(存储过程)、Text(⽂本)</param>/// <param name="sql">数据库操作字符集</param>/// <param name="paras">查询数据库时所⽤的参数</param>/// <returns>object(⼀般为单个值)</returns>public object GetScalar(CommandType type, string sql, params SqlParameter[] paras){SqlConnection con = GetConnection();//创建数据集对象SqlCommand cmd = new SqlCommand(sql, con);//操作数据库对象mandType = type;//数据库操作的类型//如果参数不为空if (paras != null){//遍历参数数组foreach (SqlParameter para in paras){cmd.Parameters.Add(para);//给操作数据库对象加上参数}}con.Open();//打开数据库连接object obj = cmd.ExecuteScalar();//返回⼀个⼀⾏⼀列的植con.Close();//关闭数据库连接return obj;}public object GetScalar(string sql, params SqlParameter[] paras){return GetScalar(CommandType.Text, sql, paras);}#region 数据填充DataTablepublic static DataTable DataFill(SqlCommand cmd){DataTable dt = new DataTable();cmd.Connection = GetConnection();SqlDataAdapter _da = new SqlDataAdapter(cmd);_da.Fill(dt);return dt;}#endregion//public DataTable DateTel(string sql)//{// SqlConnection con = GetConnection();// SqlCommand cmd = new SqlCommand(sql, con);// SqlDataAdapter da = new SqlDataAdapter(cmd);// DataTable dt = new DataTable();// da.Fill(dt);// return dt;//}internal DataSet GetDataSet(string sql, int UID){throw new NotImplementedException();}public static SqlCommand GetCommand(string text){SqlCommand cmdObject = new SqlCommand();mandText = text;return cmdObject;}public static void PreparedCommand(SqlCommand cmd, SqlParameter[] pars) {foreach (SqlParameter p in pars){cmd.Parameters.Add(p);}}}}。
sqlHelper
SqlHelper代码、功能、用法介绍数据访问组件SqlHelper数据访问组件是一组通用的访问数据库的代码,在所有项目中都可以用,一般不需要修改。
本节使用的是Microsoft提供的数据访问助手,其封装很严密,且应用简单。
首先要先添加一个类,并命名为SqlHelper,系统会提示是否将类放在App_Code文件夹中。
此时一定要选择“是”,因为放在此文件夹下,系统会自动进行编译,程序员就可以直接使用,无需另外编译了。
SqlHelper的功能SqlHelper的目的是从数据库获得信息或将信息保存到数据库。
本实例的SqlHelper 主要功能如下。
(1)执行不返回数据的T-Sql命令。
例如修改会员卡信息、添加会员资料等。
(2)返回一个字段的T-Sql命令。
例如获取会员卡类型的积分规则。
(3)返回一组数据。
例如获取会员资料、获取所有会员卡类型等。
(4)缓存参数列表。
在执行一条语句时,可能有多个参数,为了提高速度,将参数缓存。
(5)读取缓存的参数。
下面用图表的方式描述SqlHelper类的功能,如图7-16所示。
图7-16 SqlHelper功能图小结本文主要介绍了如何在Visual Studio 2005中新建网站项目,如何使用版本控制工具管理网站的源代码,以及母版页、导航地图和皮肤文件的使用。
导航地图中以XML文件为数据源,TreeView为展现形式。
除了需要在XML文件中手动填写模块功能外,其他都可以自动实现,这就是 2.0的最大好处。
代码量的减少给开发人员带来了极大的便利。
SqlHelper的小知识SqlHelper是一个微软完全开放源码的数据库操作类,用于简化你重复的去写那些数据库连接(DbConnection)啊,DbCommand,DbDataReader等等。
SqlHelper 封装过后通常是只需要给方法传入一些参数如数据库连接字符串,SQL参数等,就可以访问数据库了,很方便。
SqlHelper 类实现详细信息SqlHelper 类用于通过一组静态方法来封装数据访问功能。
第1讲_Win三层架构数据库应用开发入门_3
6利用MyDbHelper实现数据库管理在“ChA104_查询数据库”和“ChA105_插删改数据库”项目中,仔细对比代码会发现,无论是查询还是插删改,大部分代码都是相似的,这是违背面向对象编程思想的,我们需要将这些代码进行抽象,经过分析和归纳,将各种数据库操作抽象成一个类MyDbHelper。
6.1创建MyDbHelper在解决方案中添加一个“类库”的项目,项目名称为“MyDbHelper”,然后添加二个类文件:Encrypt.cs和SqlDbHelper.cs,如下图。
Encrypt.cs文件与“ChA103_加密配置”项目中的Encrypt.cs文件内容完全相同,只是命名空间的名称不同,你可以将那个文件用鼠标拖到“MyDbHelper”项目中,然后修改命名空间为“MyDbHelper”,也可添加类文件Encrypt.cs后,再复制文件中的内容。
SqlDbHelper.cs文件是我们抽象的关于SQL Server数据操作的方法类,包括了数据库连接、查询、执行命令等方法,代码如下。
///<summary>///得到当前连接对象///</summary>///<returns>连接对象</returns>static public SqlConnection GetConn(){if (_connStr == "")GetConnStr();var conn = new SqlConnection(_connStr);return conn;}public void OpenConnection(){_conn = GetConn();_conn.Open();}public void CloseConnection(){if (_conn.State != ConnectionState.Closed) _conn.Close();}//-------------- 执行命令 ----------------public bool ExecuteNonQuery(string strCmd) {var cmd = new SqlCommand(strCmd);try{OpenConnection();cmd.Connection = _conn;cmd.ExecuteNonQuery();return true;}catch (Exception){return false;}finally{CloseConnection();}}//-------------- 返回一个值 ----------------public object ExecuteScalar(string strCmd){var cmd = new SqlCommand(strCmd);try{OpenConnection();cmd.Connection = _conn;return cmd.ExecuteScalar();}catch (Exception)注意:SqlDbHelper类中在获取数据库连接时是采用从App.config或web.config文件中获取连接字符串的方式,而且连接字符串的名字指定为“ConnectionString”,为了支持加密连接字符串和不加密连接字符串两种方式,在App.config或web.config文件中,还需要在appSettingsa节定义一个ConnEncrypt的设置,App.config文件的设置参见如下:注意:这个App.config或web.config文件不是放在“MyDbHelper”项目中的,而是放在需要应用“MyDbHelper”这个类库的项目中。
C#考试题——精选推荐
选择题1、数据适配器(DataAdapter)对象属于.Net数据提供程序,该对象的()方法用于将DataSet 中数据提交到数据库。
(选择一项)a) closeb) Fillc) Updated) Select2、在中,DataSet对象相当于一个临时的()。
(选择一项)a) 数据表b) 存储过程c) 数据库d) 数据适配器3、 DataSet是中用于存储从数据库检索到的数据的对象,下列关于DataSet 的说法错误的是()(选择一项)a) 在DataSet中可以包含多个DataTableb) DataSet可以简单地理解为一个临时数据库c) 在与数据库断开连接后,DataSet中的数据会消失d) DataSet实际是从数据源中检索到的数据在内存中的缓存4、在中,下列代码运行后的输出结果是()(选择一项)DataTable dt=new DataTable();Dt.Columns.Add(“编号”,typeof(System.Int16));Dt.Columns.Add(“成绩”,typeof(System.Int16));for(int i=1;i<=3;i++){DataRow dr=dt.NewRow();Dr[0]=i;Dr.Rows.Add(dr);}Console.WriteLine(dt.Rows.Count);a) 1b) 2c) 3d) 45、数据适配器(DataAdapter)对象属于.NET数据提供程序,该对象的()方法用于向DataSet中填充数据。
(选择一项)a) Closeb) Fillc)Updated)SelectDataGridView1中显示表carsinfo中数据的代码片段,其中DBHelper.Connection为数据库连接对象。
代码中存在错误的是第()行。
a) 1b) 2c) 3d) 4e)没有错误选择题1、中的Command对象允许向数据库传递请求,以便检索和操作数据库中的对象,下列()方法不是Command对象的方法。
使用DBHelper
使用DBHelper处女作代码o(∩_∩)o...哈哈!使用DBHelper完成数据层的访问及执行public class DBHelper{private static string connString;static DBHelper(){connString = ConfigurationManager.ConnectionStrings["MySchoolConnectio nString"].ToString();}public SqlConnection GetConnection(bool hasOpen){SqlConnection conn = new SqlConnection(connString);if (hasOpen)conn.Open();return conn;}public DataSet GetDataSet(string sql, CommandType cmdType, string dsName){DataSet ds = new DataSet();SqlConnection conn = new SqlConnection(connString);SqlDataAdapter objAdapter = new SqlDataAdapter(sql, conn);mandType = cmdType;objAdapter.Fill(ds, dsName);conn.Close();conn.Dispose();return ds;}public SqlDataReader GetReader(string sql, CommandType cmdType, params SqlParameter[] sqlParams){SqlCommand cmd = new SqlCommand();mandType = cmdType;mandText = sql;if (sqlParams != null)cmd.Parameters.AddRange(sqlParams);SqlConnection conn = GetConnection(true);cmd.Connection = conn;returncmd.ExecuteReader(CommandBehavior.CloseConnection);}public int ExecuteSql(string sql, CommandType cmdType, params SqlParameter[] sqlParams){int ret = 0;SqlCommand cmd = new SqlCommand();mandType = cmdType;mandText = sql;if (sqlParams != null)cmd.Parameters.AddRange(sqlParams);SqlConnection conn = GetConnection(true);cmd.Connection = conn;try{ret = (int)cmd.ExecuteNonQuery();}finally{conn.Close();}return ret;}}调用DBHelper:public class GradeService{#region Private Members//从配置文件中读取数据库连接字符串private readonly string connString = ConfigurationManager.ConnectionStrings["MySchoolConnectio nString"].ToString();private readonly string dboOwner = ConfigurationManager.ConnectionStrings["DataBaseOwner"].T o String();#endregion#region Public Methods/// <summary>/// 获得全部年级信息/// <returns>年级数据集</returns>public DataSet GetAllGrades(){DBHelper dbHelper = new DBHelper();returndbHelper.GetDataSet(dboOwner+".usp_SelectGradesAll",Comm andType.StoredProcedure,"grade");}/// <summary>/// 根据年级名称获得年级ID/// </summary>/// <param name="gradeName">年级名称</param>/// <returns>年级ID</returns>public int GetGradeIDByGradeName(string gradeName){int number = 0;DBHelper dbHelper = new DBHelper();SqlParameter sqlParams = new SqlParameter("@GradeName", SqlDbType.NVarChar, 50);sqlParams.Value = gradeName;SqlDataReader objReader =dbHelper.GetReader(dboOwner + ".usp_SelectGradeByGradeName", CommandType.StoredProcedure, sqlParams);if (objReader.Read())number = Convert.ToInt32(objReader["GradeID"]);objReader.Close();objReader.Dispose();return number;}/// 新增年级/// </summary>public void AddGrade(DataSet dsGrade){DBHelper dbHelper = new DBHelper();SqlParameter[] sqlParams= new SqlParameter[1];sqlParams[0] = new SqlParameter("@GradeName", SqlDbType.NVarChar, 50);//sqlParams[1] = new SqlParameter("@GradeID", SqlDbType.Int);sqlParams[0].Value = dsGrade.Tables["Grade"].Rows[0]["GradeName"];//sqlParams[1].Value = 0;dbHelper.ExecuteSql(dboOwner + ".usp_SelectGradeByGradeName",CommandType.StoredProcedure, sqlParams);}#endregion}。
DBHelper帮助类
{
DataTable dataTable = null;
try
//:@在这里处理异常
throw new Exception(ex.Message);
//:$
}
}
/// <summary>
/// 执行指定sql语句,并返回DataTable对象
/// </summary>
/// <param name="CommandText">sql语句</param>
/// <param name="Params">参数列表</param>
/// <returns></returns>
}
/// <summary>
/// 获取一个数据库连接对象
/// </summary>
/// <returns></returns>
public static SqlConnection GetSqlConnection()
}
finally
{
try
{
_sCon.Close();
}
catch (Exception ex2)
DBHelper.Parameter[] sps = new DBHelper.Parameter[] {
new DBHelper.Parameter("@PageIndex",pageIndex)
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语句中的参数名。
DTcms系统架构分析报告报告材料文档
在线记事本系统架构分析文档1:简介1.1.目的为对在线记事本系统架构不够了解,能更快了解在线记事本系统的架构,并快速掌握整个系统的运行顺序。
1.2.范围本文档主要写在线记事本的架构分析,每一层之间的依赖关系以及引用方式2:设计方案系统主要是以(C#)+jQuery技术为中心,同时结合AJAX技术组合开发,简单的说系统是以三层框架的形式来构建,分别是Model,Dal,Bll;层接关系顺序是:common, model, BDutility, DAL, BLL,, Web。
2.1系统外部环境系统外部环境和ASP开发一样,需要安装Visual Studio2010版本和我们需要的数据库SQL Server2008 以及IIS(根据电脑系统不一样选择合适的IIS版本),举个例子我的电脑是XP2002版本用IIS是5.0-6.0的IIS都可以。
2.2依赖关系具体依赖关系为下图:图注:每一种线的颜色代表这个层所依赖了那些层3.系统框架3.1物理结构系统的物理结构就是在设计方案里面写的,系统以common, model, BDutility, DAL, BLL, Web.UI, Web的顺序运行,开发过程依赖关系也是这样的顺序来的。
见图:3.2逻辑结构逻辑结构我以依赖图和系统内实例图结合文字的方式一起说明:3.2.1Common层Common这个层主要放着一些缓存处理文件,加密处理,系统版本设置,内置对象获取对象的逻辑,模板处理逻辑文件,配置文件帮助等属于系统外部图片处理的文件。
它没有依赖那个层,它是整个项目独立的一个层。
3.2.2 Model层顾名思义的都知道Model层里面的一个类对应数据库里面的一张表,类里面的每一个属性对应表里面的一个字段,每个属性都有自己的 GET 和 SET 方法,项目中的数据存取都要依靠GET和SET方法来实现.确切的说它不属于纵向的哪一层,而是所有层都要用到的业务实体层。
仅依赖于Commom这个层3.2.3 BDutility层BDUtility层主要放的是和数据库有关联的文件,比如链接数据库,处理增删改查等通用的公共方法的集合体都在BDutility层下面的DbHelperSQL.cs文件中,这样在我们数据访问层中需要做这些逻辑功能的时候只要引用这文件既能调用到想要的操作方法。
db类的语法
db类的语法DB类的语法数据库是现代软件系统中非常重要的组成部分,它负责存储和管理数据。
在许多编程语言中,都提供了DB类,用于与数据库进行交互。
本文将介绍DB类的语法以及其常用方法和属性。
1. 连接数据库DB类的第一个步骤是连接到数据库。
在构造函数中,我们需要提供数据库的主机名、用户名、密码和数据库名等必要信息。
连接成功后,我们可以使用其他方法来执行各种数据库操作。
2. 执行SQL语句DB类提供了execute方法来执行SQL语句。
我们可以直接传入SQL 语句作为参数,也可以使用占位符和参数绑定的方式来执行动态SQL语句。
execute方法返回一个布尔值,表示执行是否成功。
3. 查询数据如果我们需要从数据库中查询数据,可以使用DB类提供的fetch方法。
fetch方法执行一条查询语句,并返回查询结果的第一行数据。
我们可以使用fetch方法的不同参数来控制返回的数据格式。
4. 执行事务DB类还支持事务操作。
通过调用beginTransaction方法,我们可以开始一个新的事务。
在事务中执行的SQL语句都将被缓存,直到调用commit方法提交事务。
如果事务执行过程中出现错误,可以调用rollback方法回滚事务。
5. 获取插入ID当我们执行一条插入语句后,可以使用DB类的lastInsertId方法来获取插入的数据的自增ID值。
这个方法通常在事务中使用,用于获取插入数据后的ID值。
6. 关闭数据库连接当我们完成数据库操作后,应该及时关闭数据库连接,释放资源。
DB类提供了close方法来关闭数据库连接。
DB类提供了一套方便、灵活的方法和属性,用于与数据库进行交互。
我们可以通过连接数据库、执行SQL语句、查询数据、执行事务等操作来实现对数据库的增删改查等功能。
使用DB类,我们可以更加高效地操作数据库,并且减少了直接操作SQL语句的复杂度。
需要注意的是,在使用DB类进行数据库操作时,我们应该保证数据库连接的安全性,避免出现SQL注入等安全漏洞。
软件开发的3层架构和多层架构的概念详解
软件开发的3层架构和多层架构的概念详解1 :三层架构:1)数据访问层:DAL:用于实现与数据库的交互和访问,从数据库猎取数据或保存数据到数据库的部分。
2)业务规律层:BLL:业务规律承上启下,用于对上下交互数据进行规律处理,实现业务目标。
3)表示层:Web主要实现和用户的交互,接受用户或返回用户恳求的数据结果的呈现,而详细的数据处理则会交给业务规律层和数据访问层去处理。
4)业务实体Modeh用于封装实体类数据结构,一般用于映射数据库的数据表或视图,用以描述业务中客观存在的对象。
Model分别出来时为了更好地解耦,更好的发挥分层、复用、扩展增加敏捷性。
5)通用Common:通用的帮助工具类(数据校验、加密解密、缓存处理等)6)数据库访问类时对ADONET的封装,封装了一些常用的重复的数据库操作。
微软的企业库SQLHelper.cs,为DAL供应访问数据库的帮助工具。
数据摩2:三层架构:(高)内聚:一个模块内各个元素彼此相关联的紧密程度(低)耦合:软件结构内不同模块之间依靠程度的度量。
优点1:三层结构将表示部分和业务规律部分根据客户层和应用服务器分别,客户端和应用服务㈱、应用服务器和数据库服务器之间的通信以及异构平台之间的数据交换都可以通过中间件或者相关程序来实现。
复用降低、周期缩短、维护便利。
优点2:分层结构将数据访问和规律操作都集中到组件中,增加了系统的复用性。
CS. BS 系统通用底层。
不管是、WINFORM、VVebService优点3:系统的扩展性大大增加。
缺点:分层多开发工作量大。
数据不直接提取降低性能。
级联修改,表示层增加一个功能。
3:三层架构实例演示:1:新建》项目分其它类型项目今ViSUaIStlIdi。
解决方案今保存:2:解决方窠今添加》新建项目)其它语言Visual C#今类库3:详细项目)属性6程序集名称+默认命名空间程序集名称:指定将包含程序集清单的输出文件的名称,即最终生成的文件名。
python dbhelper写法
python dbhelper写法Python中可以使用多种方式来编写数据库助手(dbhelper),下面是一个简单的示例,使用Python的sqlite3模块来创建一个数据库助手类:```pythonimport sqlite3class DBHelper:def __init__(self, db_name):= (db_name)= ()def create_table(self, table_name, columns):(f"CREATE TABLE IF NOT EXISTS {table_name} ({columns})")def insert_data(self, table_name, data):(f"INSERT INTO {table_name} VALUES ({data})")def query_data(self, table_name, condition=None):if condition:(f"SELECT FROM {table_name} WHERE {condition}")else:(f"SELECT FROM {table_name}")return ()def update_data(self, table_name, condition, data):(f"UPDATE {table_name} SET {data} WHERE {condition}")def delete_data(self, table_name, condition):(f"DELETE FROM {table_name} WHERE {condition}")def close(self):()()```这个类包含了一些基本的数据库操作,如创建表、插入数据、查询数据、更新数据和删除数据。
SQL 操作DBHelper
其实,微软的企业库中有一个非常不错的数据操作类了.但是,不少公司(起码我遇到的几个...),对一些"封装"了些什么的东西不太敢用,虽然我推荐过微软的企业库框架了...但是还是要"评估"...一评就是几个月...而且,一些公司有的根本就是裸开发,或者自己封装的数据库操作类非常别扭,很不好用.这里我给大家共享一个我参照企业库中的数据操作组件编码风格写的数据库操作类,对使用它的程序员来说,编码是很舒服滴(起码我觉得很好撒).以下是代码,很简单的,没有做任何多余的封装,只是改变了的编码步骤,方便了具体开发数据库操作代码的程序员.using System;using System.Data;using mon;using System.Configuration;public class DbHelper{private static string dbProviderName = ConfigurationManager.AppSettings["DbHelperProvider"];private static string dbConnectionString = ConfigurationManager.AppSettings["DbHelperConnectionS tring"];private DbConnection connection;public DbHelper(){this.connection = CreateConnection(DbHelper.dbConnectionString);}public DbHelper(string connectionString){this.connection = CreateConnection(connectionString);}public static DbConnection CreateConnection(){DbProviderFactory dbfactory = DbProviderFactories.GetFactory(DbHelper.dbProviderName);DbConnection dbconn = dbfactory.CreateConnection();dbconn.ConnectionString = DbHelper.dbConnectionString;return dbconn;}public static DbConnection CreateConnection(string connectionString){DbProviderFactory dbfactory = DbProviderFactories.GetFactory(DbHelper.dbProviderName);DbConnection dbconn = dbfactory.CreateConnection();dbconn.ConnectionString = connectionString;return dbconn;}public DbCommand GetStoredProcCommond(string storedProcedure){DbCommand dbCommand = connection.CreateCommand();mandText = storedProcedure;mandType = CommandType.StoredProcedure;return dbCommand;}public DbCommand GetSqlStringCommond(string sqlQuery) {DbCommand dbCommand = connection.CreateCommand();mandText = sqlQuery;mandType = CommandType.Text;return dbCommand;}增加参数执行执行事务}public class Trans : IDisposable{private DbConnection conn;private DbTransaction dbTrans;public DbConnection DbConnection{get { return this.conn; }}public DbTransaction DbTrans{get { return this.dbTrans; }}public Trans(){conn = DbHelper.CreateConnection();conn.Open();dbTrans = conn.BeginTransaction();}public Trans(string connectionString){conn = DbHelper.CreateConnection(connectionString);conn.Open();dbTrans = conn.BeginTransaction();}public void Commit(){mit();this.Colse();}public void RollBack(){dbTrans.Rollback();this.Colse();}public void Dispose(){this.Colse();}public void Colse(){if (conn.State == System.Data.ConnectionState.Open){conn.Close();}}}那么如何使用它呢?下面我给出一些基本的使用示例,基本能满足你大部分的数据库操作需要了.1)直接执行sql语句DbHelper db = new DbHelper();DbCommand cmd = db.GetSqlStringCommond("insert t1 (id)values('haha')"); db.ExecuteNonQuery(cmd);2)执行存储过程DbHelper db = new DbHelper();DbCommand cmd = db.GetStoredProcCommond("t1_insert");db.AddInParameter(cmd, "@id", DbType.String, "heihei");db.ExecuteNonQuery(cmd);3)返回DataSetDbHelper db = new DbHelper();DbCommand cmd = db.GetSqlStringCommond("select * from t1");DataSet ds = db.ExecuteDataSet(cmd);4)返回DataTableDbHelper db = new DbHelper();DbCommand cmd = db.GetSqlStringCommond("t1_findall");DataTable dt = db.ExecuteDataTable(cmd);5)输入参数/输出参数/返回值的使用(比较重要哦)DbHelper db = new DbHelper();DbCommand cmd = db.GetStoredProcCommond("t2_insert");db.AddInParameter(cmd, "@timeticks", DbType.Int64, DateTime.Now.Ticks);db.AddOutParameter(cmd, "@outString", DbType.String, 20);db.AddReturnParameter(cmd, "@returnValue", DbType.Int32);db.ExecuteNonQuery(cmd);string s = db.GetParameter(cmd, "@outString").Value as string;//out parameterint r = Convert.ToInt32(db.GetParameter(cmd, "@returnValue").Value);//return value 6)DataReader使用DbHelper db = new DbHelper();DbCommand cmd = db.GetStoredProcCommond("t2_insert");db.AddInParameter(cmd, "@timeticks", DbType.Int64, DateTime.Now.Ticks);db.AddOutParameter(cmd, "@outString", DbType.String, 20);db.AddReturnParameter(cmd, "@returnValue", DbType.Int32);using (DbDataReader reader = db.ExecuteReader(cmd)){dt.Load(reader);}string s = db.GetParameter(cmd, "@outString").Value as string;//out parameterint r = Convert.ToInt32(db.GetParameter(cmd, "@returnValue").Value);//return value7)事务的使用.(项目中需要将基本的数据库操作组合成一个完整的业务流时,代码级的事务是必不可少的哦)pubic void DoBusiness(){using (Trans t = new Trans()){try{D1(t);throw new Exception();//如果有异常,会回滚滴D2(t);mit();}catch{t.RollBack();}}}public void D1(Trans t){DbHelper db = new DbHelper();DbCommand cmd = db.GetStoredProcCommond("t2_insert");db.AddInParameter(cmd, "@timeticks", DbType.Int64, DateTime.Now.Ticks);db.AddOutParameter(cmd, "@outString", DbType.String, 20);db.AddReturnParameter(cmd, "@returnValue", DbType.Int32);if (t == null) db.ExecuteNonQuery(cmd);else db.ExecuteNonQuery(cmd,t);string s = db.GetParameter(cmd, "@outString").Value as string;//out parameterint r = Convert.ToInt32(db.GetParameter(cmd, "@returnValue").Value);//return value }public void D2(Trans t){DbHelper db = new DbHelper();DbCommand cmd = db.GetSqlStringCommond("insert t1 (id)values('..')");if (t == null) db.ExecuteNonQuery(cmd);else db.ExecuteNonQuery(cmd, t);}以上我们好像没有指定数据库连接字符串,大家如果看下DbHelper的代码,就知道要使用它必须在config中配置两个参数,如下:<appSettings><add key="DbHelperProvider" value="System.Data.SqlClient"/><add key="DbHelperConnectionString" value="Data Source=(local);Initial Catalog=DbHelperTest;Pe rsist Security Info=True;User ID=sa;Password=sa"/></appSettings>其实,DbHelper需要的仅仅是两个字符串,你可以自己修改,作成加密什么的...好了,就这样,DbHelper的代码是非常简单和透明的,只是在上做了一点小包装,改变了一下使用它的程序员的编码方式,去除掉一些比较"物理级"的编程概念,如connection的open和close之类的,使程序员更专注于业务逻辑代码的编写,少死掉点脑细胞,另外,统一了数据操作层的数据操作代码的风格和格式,维护起来很方便的撒~~~另:以上代码大家可以随意使用, 不需要给我版权费的啦,嘿嘿.如果大家发现有什么BUG,或者有更好的数据操作类的实现方式,请联系我哦.。
DbHelperSQL事务写法!
DbHelperSQL事务写法! 1try2 {3 mandInfo dbcom = new mandInfo();4 List<mandInfo> strStranList = new List<mandInfo>();56 StringBuilder strSql = new StringBuilder();7 strSql.Append("Update Jia72_Members Set ");8 strSql.Append("UserName=@UserName,");9 strSql.Append("YTCardId=@YTCardId,");10 strSql.Append("CardNum=@CardNum,");11 strSql.Append("Bank=@Bank,");12 strSql.Append("BankNumber=@BankNumber,");13 strSql.Append("QQNumber=@QQNumber,");14 strSql.Append("RealName=@RealName,");15 strSql.Append("SavedOn=@SavedOn");16 strSql.Append(" Where Id=@Id ");17string strSQLM = strSql.ToString();1819 SqlParameter[] parameters = {20new SqlParameter("@Id",SqlDbType.Int,4),21new SqlParameter("@UserName",SqlDbType.NVarChar,20),22new SqlParameter("@YTCardId",SqlDbType.Int,4),23new SqlParameter("@CardNum",SqlDbType.NVarChar,20),24new SqlParameter("@Bank",SqlDbType.NVarChar,50),25new SqlParameter("@BankNumber",SqlDbType.NVarChar,32),26new SqlParameter("@QQNumber",SqlDbType.NVarChar,50),27new SqlParameter("@RealName",SqlDbType.NVarChar,10),28new SqlParameter("@SavedOn",SqlDbType.DateTime)29 };30 parameters[0].Value = model.Id;31 parameters[1].Value = erName;32 parameters[2].Value = model.YTCardId;33 parameters[3].Value = model.CardNum;34 parameters[4].Value = model.Bank;35 parameters[5].Value = model.BankNumber;36 parameters[6].Value = model.QQNumber;37 parameters[7].Value = model.RealName;38 parameters[8].Value = model.SavedOn;3940 mandText = strSql.ToString();41 dbcom.Parameters = parameters;42 strStranList.Add(dbcom);//绑定会员信息4344//更新卡表45 strSql.Clear();46 strSql.Append("update Jia72_YTCard set ");47 strSql.Append("IsBind=1,");48 strSql.Append("SavedOn=getdate()");49 strSql.Append(" where Id=" + model.YTCardId);5051 mandText = strSql.ToString();52 dbcom.Parameters = null;53 strStranList.Add(dbcom);//更新卡表绑定5455if (DBUtility.DbHelperSQL.ExecuteSqlTran(strStranList) > 0)56 {57 mon.MessageBox.ShowAndRedirect(this, "保存成功!", "UserManages.aspx");58 }59else60 {61 MessageBox.Show(this, "操作失败,请联系管理员!");62 }63 }64catch (Exception ex)65 {66 LogHelper.WriteWebExLogInfo(this, ex);67 MessageBox.Show(this, "操作失败,请联系管理员!");68return;69 }说明:引⽤ DBUtility ⽤CommandInfo组织参数!还得⽤SQLHelper,悲催呀!。
三层结构练习试题
1)在使用.NET开发应用程序过程中,如果需要提供在多种数据库上无缝移植的功能时,我们应当采用(c )设计模式(选择一项)a)面向对象b)面向过程c)抽象工厂d)实体工厂2)在.NET开发环境下开发一个学籍管理系统,当搭建三层结构的表示层时,需要创建的项目类型是(a )(选择一项)a)Windows应用程序b)类库c)控制台应用程序d)Windows控件库3)在NET框架下开发三层结构应用程序时,以下代码最有可能出现在(a )(选择一项)switch(cboLoglnType){case学员”StudentForm studentForm = new StudentFomr(); studentForm.Show();break;case管理员”AdminForm adminForm = new AdminForm(); adminForm.Show();break;}a)表示层b)业务逻辑层c)数据访问层d)模型层4)在.NET框架下开发三层结构的数据库应用程序时,可以通过(bc )方法创建DataSet(数据集)对象(选择两项)a)通过Conn ection和Comma nd对象将数据填充到DataSet中b)通过DataAdapter(适配器对象)的Fill方法直接填充到DataSet对象中c)通过手动编码自定义DataTable、DataColumn和DataRow,然后将数据表添加到DataSet中d)通过DataReader对象Fill方法将数据添加到DataSet对象中5)在.net 二项):框架下开发的应用程序中,客户程序主要依赖于( ad )。
(选择a) 抽象工厂b) 实体工厂c) 实体产品d)抽象产品6)在.net 框架下开发三层结构应用程序时,关于三层结构的说法错误的是 (d )(选择一项)a ) 三层结构体现了“高内聚,低耦合”的思想b ) 三层结构在大中型应用系统中应用较多c ) 三层结构适用于客户界面需求经常发生变化的情景d )三层结构适用于客户对开发语言要求经常发生变化的情景7)在.net 框架下使用实体类实现三层结构时,以下选项中用于实现数据访问层 返回强类型实体对象集合的是(ab )。
分页存储过程的使用(C# WinForm+SQL Server 2008)
《企业信息化项目开发》上机内容
分页存储过程的使用(C# WinForm + SQL Server 2008)
一、实训目标
1.数据库访问类存储过程的添加
2.使用存储过程对数据库表进行增、删、改
3.使用存储过程查询数据库表中数据
二、涉及知识点
1.SqlParameter参数对象的使用
2.普通存储过程的编写
3.带参数存储过程的编写
4.使用存储过程进行分页查询
三、实训内容
分页存储过程调用的实现(80分钟)
四、实训步骤
1.打开项目和加载数据库访问类并进行修改。
(1)打开我提供的Windows项目“StudentPagenation”。
(2)添加配置文件App.config。
(3)将大家之前写好的数据库访问类“SQLDBHelper.cs”拷贝到代码文件夹并在项目中将其添加现有项添加进来。
(4)为项目添加引用“System.Configuration”。
(5)打开访问类,修改namespace命名空间名称为“StudentPagenation”。
2.打开SQL Server 2008,附加数据库“学生”,修改配置文件:
3.在SQL Server 2008中创建和执行分页存储过程,用Windows应用程序实现分页项目,实现方式如下图(对课程表进行分页显示数据):
(1)在SQL Server中编写如下两个存储过程:
(2)实现分页存储过程
参考代码:
(提交代码时请提交源代码和存储过程脚本)五、课后作业
复习存储过程的使用。
C#操作sqlserver的DbHelper类(带分页)
C#操作sqlserver的DbHelper类(带分页)1、配置⽂件设置:<appSettings><add key="testDB" value="server=192.168.1.10\sw;database=testDB;uid=sa;pwd=Aa123456" /></appSettings>2、操作数据帮助类:using System;using System.Collections.Generic;using System.Configuration;using System.Data;using mon;using System.Data.SqlClient;using System.Linq;using System.Text;using System.Threading.Tasks;namespace SwbAPI{public class DbHelper{//连接字符串static string strConn = ConfigurationManager.AppSettings["JiTuanShangWuDB"].ToString();//static string strConn = "server=192.168.1.238\sw;database=BusinessSystemDB;uid=sa;pwd=Aa123456";#region执⾏查询,返回DataTable对象-----------------------public static DataTable GetTable(string strSQL){return GetTable(strSQL, null);}public static DataTable GetTable(string strSQL, SqlParameter[] pas){return GetTable(strSQL, pas, CommandType.Text);}///<summary>///执⾏查询,返回DataTable对象///</summary>///<param name="strSQL">sql语句</param>///<param name="pas">参数数组</param>///<param name="cmdtype">Command类型</param>///<returns>DataTable对象</returns>public static DataTable GetTable(string strSQL, SqlParameter[] pas, CommandType cmdtype){DataTable dt = new DataTable(); ;using (SqlConnection conn = new SqlConnection(strConn)){SqlDataAdapter da = new SqlDataAdapter(strSQL, conn);mandType = cmdtype;if (pas != null){da.SelectCommand.Parameters.AddRange(pas);}da.Fill(dt);}return dt;}#region根据枚举连接数据库public static DataTable GetTable(string strSQL, DataBaseName dataBaseName){return GetTable(strSQL, null, dataBaseName);}public static DataTable GetTable(string strSQL, SqlParameter[] pas, DataBaseName dataBaseName){return GetTable(strSQL, pas, CommandType.Text, dataBaseName);}///<summary>///执⾏查询,返回DataTable对象///</summary>///<param name="strSQL">sql语句</param>///<param name="pas">参数数组</param>///<param name="cmdtype">Command类型</param>///<returns>DataTable对象</returns>public static DataTable GetTable(string strSQL, SqlParameter[] pas, CommandType cmdtype, DataBaseName dataBaseName){DataTable dt = new DataTable(); ;using (SqlConnection conn = new SqlConnection(GetEnumDes(dataBaseName.ToString()))){SqlDataAdapter da = new SqlDataAdapter(strSQL, conn);mandType = cmdtype;if (pas != null)}#endregion#endregion#region执⾏查询,返回DataSet对象-------------------------public static DataSet GetDataSet(string strSQL){return GetDataSet(strSQL, null);}public static DataSet GetDataSet(string strSQL, SqlParameter[] pas){return GetDataSet(strSQL, pas, CommandType.Text);}///<summary>///执⾏查询,返回DataSet对象///</summary>///<param name="strSQL">sql语句</param>///<param name="pas">参数数组</param>///<param name="cmdtype">Command类型</param>///<returns>DataSet对象</returns>public static DataSet GetDataSet(string strSQL, SqlParameter[] pas, CommandType cmdtype){DataSet dt = new DataSet(); ;using (SqlConnection conn = new SqlConnection(strConn)){SqlDataAdapter da = new SqlDataAdapter(strSQL, conn);mandType = cmdtype;if (pas != null){da.SelectCommand.Parameters.AddRange(pas);}da.Fill(dt);if (dt != null && dt.Tables.Count == 2){dt.Tables[0].TableName = "DataList";dt.Tables[1].TableName = "DataTotal";}else if (dt != null && dt.Tables.Count == 1){dt.Tables[0].TableName = "DataList";}}return dt;}#region根据枚举连接数据库public static DataSet GetDataSet(string strSQL, DataBaseName dataBaseName){return GetDataSet(strSQL, null, dataBaseName);}public static DataSet GetDataSet(string strSQL, SqlParameter[] pas, DataBaseName dataBaseName){return GetDataSet(strSQL, pas, CommandType.Text, dataBaseName);}///<summary>///执⾏查询,返回DataSet对象///</summary>///<param name="strSQL">sql语句</param>///<param name="pas">参数数组</param>///<param name="cmdtype">Command类型</param>///<returns>DataSet对象</returns>public static DataSet GetDataSet(string strSQL, SqlParameter[] pas, CommandType cmdtype, DataBaseName dataBaseName) {DataSet dt = new DataSet(); ;using (SqlConnection conn = new SqlConnection(GetEnumDes(dataBaseName.ToString()))){SqlDataAdapter da = new SqlDataAdapter(strSQL, conn);mandType = cmdtype;if (pas != null){da.SelectCommand.Parameters.AddRange(pas);}da.Fill(dt);if (dt != null && dt.Tables.Count == 2){dt.Tables[0].TableName = "DataList";dt.Tables[1].TableName = "DataTotal";}else if (dt != null && dt.Tables.Count == 1){#endregion#region执⾏⾮查询存储过程和SQL语句-----------------------------public static int ExcuteProc(string ProcName){return ExcuteSQL(ProcName, null, CommandType.StoredProcedure);}public static int ExcuteProc(string ProcName, SqlParameter[] pars){return ExcuteSQL(ProcName, pars, CommandType.StoredProcedure);}public static int ExcuteSQL(string strSQL){return ExcuteSQL(strSQL, null);}public static int ExcuteSQL(string strSQL, SqlParameter[] paras){return ExcuteSQL(strSQL, paras, CommandType.Text);}///执⾏⾮查询存储过程和SQL语句///增、删、改///</summary>///<param name="strSQL">要执⾏的SQL语句</param>///<param name="paras">参数列表,没有参数填⼊null</param>///<param name="cmdType">Command类型</param>///<returns>返回影响⾏数</returns>public static int ExcuteSQL(string strSQL, SqlParameter[] paras, CommandType cmdType){int i = 0;using (SqlConnection conn = new SqlConnection(strConn)){SqlCommand cmd = new SqlCommand(strSQL, conn);mandType = cmdType;if (paras != null){cmd.Parameters.AddRange(paras);}conn.Open();i = cmd.ExecuteNonQuery();conn.Close();}return i;}#region执⾏sql返回⾃增ID///<summary>///执⾏SQL语句,返回⾃增ID///</summary>///<param name="SQLString">SQL语句</param>///<returns>影响的记录数</returns>public static int ExecuteSQLReturnID(string SQLString){using (SqlConnection connection = new SqlConnection(strConn)){using (SqlCommand cmd = new SqlCommand(SQLString, connection)){try{connection.Open();mandText += ";\nSELECT SCOPE_IDENTITY() AS NewID;";int id = Convert.ToInt32(cmd.ExecuteScalar());return id;}catch (System.Data.SqlClient.SqlException e){connection.Close();throw e;}}}}#endregion#region执⾏sql返回⾃增ID///<summary>///执⾏SQL语句,返回⾃增ID///</summary>///<param name="SQLString">SQL语句</param>///<returns>影响的记录数</returns>public static int ExecuteSQLReturnID(string SQLString, SqlParameter[] paras, DataBaseName dataBaseName) {try{if (paras != null){cmd.Parameters.AddRange(paras);}connection.Open();mandText += ";\nSELECT SCOPE_IDENTITY() AS NewID;";int id = Convert.ToInt32(cmd.ExecuteScalar());return id;}catch (System.Data.SqlClient.SqlException e){connection.Close();throw e;}}}}#endregion#region根据枚举连接数据库public static int ExcuteProc(string ProcName, DataBaseName dataBaseName){return ExcuteSQL(ProcName, null, CommandType.StoredProcedure, dataBaseName);}public static int ExcuteProc(string ProcName, SqlParameter[] pars, DataBaseName dataBaseName){return ExcuteSQL(ProcName, pars, CommandType.StoredProcedure, dataBaseName);}public static int ExcuteSQL(string strSQL, DataBaseName dataBaseName){return ExcuteSQL(strSQL, null, dataBaseName);}public static int ExcuteSQL(string strSQL, SqlParameter[] paras, DataBaseName dataBaseName){return ExcuteSQL(strSQL, paras, CommandType.Text, dataBaseName);}///执⾏⾮查询存储过程和SQL语句///增、删、改///</summary>///<param name="strSQL">要执⾏的SQL语句</param>///<param name="paras">参数列表,没有参数填⼊null</param>///<param name="cmdType">Command类型</param>///<returns>返回影响⾏数</returns>public static int ExcuteSQL(string strSQL, SqlParameter[] paras, CommandType cmdType, DataBaseName dataBaseName) {int i = 0;using (SqlConnection conn = new SqlConnection(GetEnumDes(dataBaseName.ToString()))){SqlCommand cmd = new SqlCommand(strSQL, conn);mandType = cmdType;if (paras != null){cmd.Parameters.AddRange(paras);}conn.Open();i = cmd.ExecuteNonQuery();conn.Close();}return i;}#region执⾏sql返回⾃增ID///<summary>///执⾏SQL语句,返回⾃增ID///</summary>///<param name="SQLString">SQL语句</param>///<returns>影响的记录数</returns>public static int ExecuteSQLReturnID(string SQLString, DataBaseName dataBaseName){using (SqlConnection connection = new SqlConnection(GetEnumDes(dataBaseName.ToString()))){using (SqlCommand cmd = new SqlCommand(SQLString, connection)){try{connection.Open();mandText += ";\nSELECT SCOPE_IDENTITY() AS NewID;";int id = Convert.ToInt32(cmd.ExecuteScalar());return id;}catch (System.Data.SqlClient.SqlException e){connection.Close();throw e;#endregion#endregion#endregion#region执⾏查询返回第⼀⾏,第⼀列---------------------------------///<summary>///执⾏SQL语句,返回第⼀⾏,第⼀列///</summary>///<param name="strSQL">要执⾏的SQL语句</param>///<param name="paras">参数列表,没有参数填⼊null</param>///<param name="paras">执⾏类型,</param>///<returns>返回结果</returns>public static object ExcuteScalarSQLObj(string strSQL, SqlParameter[] paras){object i ;using (SqlConnection conn = new SqlConnection(strConn)){SqlCommand cmd = new SqlCommand(strSQL, conn);mandType = CommandType.Text;if (paras != null){cmd.Parameters.AddRange(paras);}conn.Open();if (DBNull.Value == cmd.ExecuteScalar()){i = null;}else{i =cmd.ExecuteScalar();}conn.Close();}return i;}public static int ExcuteScalarSQL(string strSQL){return ExcuteScalarSQL(strSQL, null);}public static int ExcuteScalarSQL(string strSQL, SqlParameter[] paras){return ExcuteScalarSQL(strSQL, paras, CommandType.Text);}public static int ExcuteScalarProc(string strSQL, SqlParameter[] paras){return ExcuteScalarSQL(strSQL, paras, CommandType.StoredProcedure);}///<summary>///执⾏SQL语句,返回第⼀⾏,第⼀列///</summary>///<param name="strSQL">要执⾏的SQL语句</param>///<param name="paras">参数列表,没有参数填⼊null</param>///<returns>返回影响⾏数</returns>public static int ExcuteScalarSQL(string strSQL, SqlParameter[] paras, CommandType cmdType) {int i = 0;using (SqlConnection conn = new SqlConnection(strConn)){SqlCommand cmd = new SqlCommand(strSQL, conn);mandType = cmdType;if (paras != null){cmd.Parameters.AddRange(paras);}conn.Open();if (DBNull.Value == cmd.ExecuteScalar()){i = 0;}else{i = Convert.ToInt32(cmd.ExecuteScalar());}conn.Close();}return i;}#region根据枚举连接数据库public static int ExcuteScalarSQL(string strSQL, DataBaseName dataBaseName){return ExcuteScalarSQL(strSQL, paras, CommandType.Text, dataBaseName);}public static int ExcuteScalarProc(string strSQL, SqlParameter[] paras, DataBaseName dataBaseName){return ExcuteScalarSQL(strSQL, paras, CommandType.StoredProcedure, dataBaseName);}///<summary>///执⾏SQL语句,返回第⼀⾏,第⼀列///</summary>///<param name="strSQL">要执⾏的SQL语句</param>///<param name="paras">参数列表,没有参数填⼊null</param>///<returns>返回影响⾏数</returns>public static int ExcuteScalarSQL(string strSQL, SqlParameter[] paras, CommandType cmdType, DataBaseName dataBaseName) {int i = 0;using (SqlConnection conn = new SqlConnection(GetEnumDes(dataBaseName.ToString()))){SqlCommand cmd = new SqlCommand(strSQL, conn);mandType = cmdType;if (paras != null){cmd.Parameters.AddRange(paras);}conn.Open();if (DBNull.Value == cmd.ExecuteScalar()){i = 0;}else{i = Convert.ToInt32(cmd.ExecuteScalar());}conn.Close();}return i;}#endregion#endregion#region查询获取单个值------------------------------------///<summary>///调⽤不带参数的存储过程获取单个值///</summary>///<param name="ProcName"></param>///<returns></returns>public static object GetObjectByProc(string ProcName){return GetObjectByProc(ProcName, null);}///<summary>///调⽤带参数的存储过程获取单个值///</summary>///<param name="ProcName"></param>///<param name="paras"></param>///<returns></returns>public static object GetObjectByProc(string ProcName, SqlParameter[] paras){return GetObject(ProcName, paras, CommandType.StoredProcedure);}///<summary>///根据sql语句获取单个值///</summary>///<param name="strSQL"></param>///<returns></returns>public static object GetObject(string strSQL){return GetObject(strSQL, null);}///<summary>///根据sql语句和参数数组获取单个值///</summary>///<param name="strSQL"></param>///<param name="paras"></param>///<returns></returns>public static object GetObject(string strSQL, SqlParameter[] paras){return GetObject(strSQL, paras, CommandType.Text);}///<summary>///执⾏SQL语句,返回⾸⾏⾸列///</summary>///<param name="strSQL">要执⾏的SQL语句</param>///<param name="paras">参数列表,没有参数填⼊null</param>///<returns>返回的⾸⾏⾸列</returns>{SqlCommand cmd = new SqlCommand(strSQL, conn);mandType = cmdtype;if (paras != null){cmd.Parameters.AddRange(paras);}conn.Open();o = cmd.ExecuteScalar();conn.Close();}return o;}#region根据枚举连接数据库///<summary>///调⽤不带参数的存储过程获取单个值///</summary>///<param name="ProcName"></param>///<returns></returns>public static object GetObjectByProc(string ProcName, DataBaseName dataBaseName){return GetObjectByProc(ProcName, null, dataBaseName);}///<summary>///调⽤带参数的存储过程获取单个值///</summary>///<param name="ProcName"></param>///<param name="paras"></param>///<returns></returns>public static object GetObjectByProc(string ProcName, SqlParameter[] paras, DataBaseName dataBaseName){return GetObject(ProcName, paras, CommandType.StoredProcedure, dataBaseName);}///<summary>///根据sql语句获取单个值///</summary>///<param name="strSQL"></param>///<returns></returns>public static object GetObject(string strSQL, DataBaseName dataBaseName){return GetObject(strSQL, null, dataBaseName);}///<summary>///根据sql语句和参数数组获取单个值///</summary>///<param name="strSQL"></param>///<param name="paras"></param>///<returns></returns>public static object GetObject(string strSQL, SqlParameter[] paras, DataBaseName dataBaseName){return GetObject(strSQL, paras, CommandType.Text, dataBaseName);}///<summary>///执⾏SQL语句,返回⾸⾏⾸列///</summary>///<param name="strSQL">要执⾏的SQL语句</param>///<param name="paras">参数列表,没有参数填⼊null</param>///<returns>返回的⾸⾏⾸列</returns>public static object GetObject(string strSQL, SqlParameter[] paras, CommandType cmdtype, DataBaseName dataBaseName) {object o = null;using (SqlConnection conn = new SqlConnection(GetEnumDes(dataBaseName.ToString()))){SqlCommand cmd = new SqlCommand(strSQL, conn);mandType = cmdtype;if (paras != null){cmd.Parameters.AddRange(paras);}conn.Open();o = cmd.ExecuteScalar();conn.Close();}return o;}#endregion#endregion#region查询获取DataReader------------------------------------///<returns>DataReader对象</returns>public static SqlDataReader GetReaderByProc(string procName){return GetReaderByProc(procName, null);}///<summary>///调⽤带有参数的存储过程,返回DataReader对象///</summary>///<param name="procName">存储过程名</param>///<param name="paras">参数数组</param>///<returns>DataReader对象</returns>public static SqlDataReader GetReaderByProc(string procName, SqlParameter[] paras){return GetReader(procName, paras, CommandType.StoredProcedure);}///<summary>///根据sql语句返回DataReader对象///</summary>///<param name="strSQL">sql语句</param>///<returns>DataReader对象</returns>public static SqlDataReader GetReader(string strSQL){return GetReader(strSQL, null);}///<summary>///根据sql语句和参数返回DataReader对象///</summary>///<param name="strSQL">sql语句</param>///<param name="paras">参数数组</param>///<returns>DataReader对象</returns>public static SqlDataReader GetReader(string strSQL, SqlParameter[] paras){return GetReader(strSQL, paras, CommandType.Text);}///<summary>///查询SQL语句获取DataReader///</summary>///<param name="strSQL">查询的SQL语句</param>///<param name="paras">参数列表,没有参数填⼊null</param>///<returns>查询到的DataReader(关闭该对象的时候,⾃动关闭连接)</returns>public static SqlDataReader GetReader(string strSQL, SqlParameter[] paras, CommandType cmdtype){SqlDataReader sqldr = null;SqlConnection conn = new SqlConnection(strConn);SqlCommand cmd = new SqlCommand(strSQL, conn);mandType = cmdtype;if (paras != null){cmd.Parameters.AddRange(paras);}conn.Open();//CommandBehavior.CloseConnection的作⽤是如果关联的DataReader对象关闭,则连接⾃动关闭sqldr = cmd.ExecuteReader(CommandBehavior.CloseConnection);return sqldr;}#region根据枚举连接数据库///<summary>///调⽤不带参数的存储过程,返回DataReader对象///</summary>///<param name="procName">存储过程名称</param>///<returns>DataReader对象</returns>public static SqlDataReader GetReaderByProc(string procName, DataBaseName dataBaseName){return GetReaderByProc(procName, null, dataBaseName);}///<summary>///调⽤带有参数的存储过程,返回DataReader对象///</summary>///<param name="procName">存储过程名</param>///<param name="paras">参数数组</param>///<returns>DataReader对象</returns>public static SqlDataReader GetReaderByProc(string procName, SqlParameter[] paras, DataBaseName dataBaseName) {return GetReader(procName, paras, CommandType.StoredProcedure, dataBaseName);}///<summary>///根据sql语句返回DataReader对象///</summary>///<param name="strSQL">sql语句</param>///<returns>DataReader对象</returns>public static SqlDataReader GetReader(string strSQL, DataBaseName dataBaseName){return GetReader(strSQL, null, dataBaseName);}///<summary>///根据sql语句和参数返回DataReader对象public static SqlDataReader GetReader(string strSQL, SqlParameter[] paras, DataBaseName dataBaseName){return GetReader(strSQL, paras, CommandType.Text, dataBaseName);}///<summary>///查询SQL语句获取DataReader///</summary>///<param name="strSQL">查询的SQL语句</param>///<param name="paras">参数列表,没有参数填⼊null</param>///<returns>查询到的DataReader(关闭该对象的时候,⾃动关闭连接)</returns>public static SqlDataReader GetReader(string strSQL, SqlParameter[] paras, CommandType cmdtype, DataBaseName dataBaseName) {SqlDataReader sqldr = null;SqlConnection conn = new SqlConnection(GetEnumDes(dataBaseName.ToString()));SqlCommand cmd = new SqlCommand(strSQL, conn);mandType = cmdtype;if (paras != null){cmd.Parameters.AddRange(paras);}conn.Open();//CommandBehavior.CloseConnection的作⽤是如果关联的DataReader对象关闭,则连接⾃动关闭sqldr = cmd.ExecuteReader(CommandBehavior.CloseConnection);return sqldr;}#endregion#endregion#region批量插⼊数据---------------------------------------------///<summary>///往数据库中批量插⼊数据///</summary>///<param name="sourceDt">数据源表</param>///<param name="targetTable">服务器上⽬标表</param>public static void BulkToDB(DataTable sourceDt, string targetTable){SqlConnection conn = new SqlConnection(strConn);SqlBulkCopy bulkCopy = new SqlBulkCopy(conn); //⽤其它源的数据有效批量加载sql server表中bulkCopy.DestinationTableName = targetTable; //服务器上⽬标表的名称bulkCopy.BatchSize = sourceDt.Rows.Count; //每⼀批次中的⾏数try{conn.Open();if (sourceDt != null && sourceDt.Rows.Count != 0)bulkCopy.WriteToServer(sourceDt); //将提供的数据源中的所有⾏复制到⽬标表中}catch (Exception ex){throw ex;}finally{conn.Close();if (bulkCopy != null)bulkCopy.Close();}}#region根据枚举连接数据库///<summary>///往数据库中批量插⼊数据///</summary>///<param name="sourceDt">数据源表</param>///<param name="targetTable">服务器上⽬标表</param>public static void BulkToDB(DataTable sourceDt, string targetTable, DataBaseName dataBaseName){SqlConnection conn = new SqlConnection(GetEnumDes(dataBaseName.ToString()));SqlBulkCopy bulkCopy = new SqlBulkCopy(conn); //⽤其它源的数据有效批量加载sql server表中bulkCopy.DestinationTableName = targetTable; //服务器上⽬标表的名称bulkCopy.BatchSize = sourceDt.Rows.Count; //每⼀批次中的⾏数try{conn.Open();if (sourceDt != null && sourceDt.Rows.Count != 0)bulkCopy.WriteToServer(sourceDt); //将提供的数据源中的所有⾏复制到⽬标表中}catch (Exception ex){throw ex;}finally}}#endregion#endregion#region根据枚举返回数据库连接字符串public static string GetEnumDes(string dataBaseName){string conn = string.Empty;if (dataBaseName == "集团商务"){conn = ConfigurationManager.AppSettings["JiTuanShangWuDB"].ToString();}else if (dataBaseName == "数据平台"){conn = ConfigurationManager.AppSettings["ShuJuPingTai"].ToString();}else if (dataBaseName == "⽜经纪") {conn = ConfigurationManager.AppSettings["NiuJingJi"].ToString();}else if (dataBaseName == "会员"){conn = ConfigurationManager.AppSettings["MobilePlatformDB"].ToString();}else if (dataBaseName == "电商官⽹"){conn = ConfigurationManager.AppSettings["ElectricityDB"].ToString();}else if (dataBaseName == "数据平台DI"){conn = ConfigurationManager.AppSettings["ShuJuPingTaiDI"].ToString();}else{conn = ConfigurationManager.AppSettings["JiTuanShangWuDB"].ToString();}return conn;}#endregion#region MyRegion 执⾏事务逻辑///<summary>///有锁的事务⽅法插⼊数据///</summary>///<param name="tran"></param>///<param name="sql"></param>///<param name="pms"></param>///<returns></returns>public static int ExecuteNonQuery(IDbTransaction tran, string sql, params SqlParameter[] pms){using (SqlCommand cmd = new SqlCommand(sql, (SqlConnection)tran.Connection, (SqlTransaction)tran)) {if (pms != null){cmd.Parameters.AddRange(pms);}return cmd.ExecuteNonQuery();}}#endregion}#region数据库--枚举(DataBaseName)///<summary>///数据库类型枚举:集团商务、⽜经纪///</summary>public enum DataBaseName{集团商务,数据平台,⽜经纪,会员,电商官⽹,数据平台DI}#endregion#region MyRegion 事务sqlpublic class TransactionDal{CreateConnection = Connection;}public void BeginTransaction(){dbconnection = new SqlConnection(CreateConnection);dbconnection.Open();transaction = dbconnection.BeginTransaction();}public void CommitTransaction(){if (null != transaction){mit();}}public void RollbackTransaction(){if (null != transaction){transaction.Rollback();}}public void DisposeTransaction(){if (dbconnection.State == ConnectionState.Open){dbconnection.Close();}if (null != transaction){transaction.Dispose();}}}#endregion}3、调⽤存储过程实例:SqlParameter[] param = new SqlParameter[]{new SqlParameter("@type", 0),new SqlParameter("@BaseID", 0),new SqlParameter("@FenGongSiID",model.tb_diqu)}BaseID = DbHelper.ExcuteProc("Proc_Base_Add", param);View Code4、修改实例:public ActionResult HuiFuKeHu(int baseid){var sql = string.Format(@"UPDATE BaseTable SET ZhuangTai=0 WHERE BaseID={0}", baseid); var re = DbHelper.ExcuteSQL(sql);var restr = "";if (re > 0)restr = "ok";elserestr = "no";return Json(new { y = restr });}View Code5、分页帮助类:using System;using System.Collections.Generic;using System.Data;using System.Data.SqlClient;using System.Linq;using System.Text;using System.Web;namespace SwbAPI{public class PagingHelper///<summary>///获取分页SQL语句,默认row_number为关健字,所有表不允许使⽤该字段名///</summary>///<param name="_pageSize">每页记录数</param>///<param name="_pageIndex">当前页数</param>///<param name="_columnSql">查询列</param>///<param name="_fromSql">from后sql</param>///<param name="_orderField">排序字段,多个则⽤“,”隔开</param>///<returns>分页SQL语句</returns>public static DataSet GetPagingData(int _pageSize, int _pageIndex, string _columnSql, string _fromSql, string _orderField){DataSet ds = null;//检查当前页数if (_pageIndex < 1){_pageIndex = 1;}//分页sql,拼接SQL字符串,加上ROW_NUMBER函数进⾏分页StringBuilder newSafeSql = new StringBuilder();newSafeSql.AppendFormat("SELECT ROW_NUMBER() OVER(ORDER BY {0}) as ROWID,", _orderField);newSafeSql.AppendFormat("{0} from {1}", _columnSql, _fromSql);//拼接成最终的SQL语句StringBuilder sbSql = new StringBuilder();sbSql.Append("SELECT * FROM (");sbSql.Append(newSafeSql.ToString());sbSql.Append(") AS T");sbSql.AppendFormat(" WHERE ROWID between {0} and {1}", ((_pageIndex - 1) * _pageSize) + 1, _pageIndex * _pageSize);// 总条数sqlsbSql.AppendFormat(";select count(1) Total from " + _fromSql);sbSql.ToString();ds = DbHelper.GetDataSet(sbSql.ToString());return ds;}#region根据枚举返回数据库连接字符串///<summary>///获取分页SQL语句,默认row_number为关健字,所有表不允许使⽤该字段名///</summary>///<param name="_pageSize">每页记录数</param>///<param name="_pageIndex">当前页数</param>///<param name="_columnSql">查询列</param>///<param name="_fromSql">from后sql</param>///<param name="_orderField">排序字段,多个则⽤“,”隔开</param>///<returns>分页SQL语句</returns>public static DataSet GetPagingData(int _pageSize, int _pageIndex, string _columnSql, string _fromSql, string _orderField, DataBaseName dataBaseName){DataSet ds = null;//检查当前页数if (_pageIndex < 1){_pageIndex = 1;}//分页sql,拼接SQL字符串,加上ROW_NUMBER函数进⾏分页StringBuilder newSafeSql = new StringBuilder();newSafeSql.AppendFormat("SELECT ROW_NUMBER() OVER(ORDER BY {0}) as ROWID,", _orderField);newSafeSql.AppendFormat("{0} from {1}", _columnSql, _fromSql);//拼接成最终的SQL语句StringBuilder sbSql = new StringBuilder();sbSql.Append("SELECT * FROM (");sbSql.Append(newSafeSql.ToString());sbSql.Append(") AS T");sbSql.AppendFormat(" WHERE ROWID between {0} and {1}", ((_pageIndex - 1) * _pageSize) + 1, _pageIndex * _pageSize);// 总条数sqlsbSql.AppendFormat(";select count(1) Total from " + _fromSql);sbSql.ToString();ds = DbHelper.GetDataSet(sbSql.ToString(),dataBaseName);return ds;}#endregion#region根据枚举返回数据库连接字符串///<summary>///获取分页SQL语句,默认row_number为关健字,所有表不允许使⽤该字段名///</summary>///<param name="_pageSize">每页记录数</param>///<param name="_pageIndex">当前页数</param>///<param name="_columnSql">查询列</param>///<param name="_fromSql">from后sql</param>///<param name="_orderField">排序字段,多个则⽤“,”隔开</param>///<returns>分页SQL语句</returns>public static DataSet GetPagingData(int _pageSize, int _pageIndex, string _columnSql, string _fromSql,SqlParameter[] param, string _orderField, DataBaseName dataBaseName) {DataSet ds = null;//检查当前页数。
DBHelper类
Class DBHelper{public static int ExecuteNonQuery(string sql, params SqlParameter[] parameters) {string constr =ConfigurationManager.ConnectionStrings["constr"].ConnectionString;using (SqlConnection con = new SqlConnection(constr)){con.Open();using (SqlCommand cmd = con.CreateCommand()){mandText = sql;foreach (SqlParameter parameter in parameters){cmd.Parameters.Add(parameter);}return cmd.ExecuteNonQuery();}}}public static object ExecuteScalar(string sql, params SqlParameter[] parameters) {string constr =ConfigurationManager.ConnectionStrings["constr"].ConnectionString;using (SqlConnection con = new SqlConnection(constr)){con.Open();using (SqlCommand cmd = con.CreateCommand()){mandText = sql;foreach (SqlParameter parameter in parameters){cmd.Parameters.Add(parameter);}return cmd.ExecuteScalar();}}}public static SqlDataReader ExecuteReader(string sql, params SqlParameter[] parameters){string constr =ConfigurationManager.ConnectionStrings["constr"].ConnectionString;using (SqlConnection con = new SqlConnection(constr)){con.Open();using (SqlCommand cmd = con.CreateCommand()){mandText = sql;foreach (SqlParameter parameter in parameters){cmd.Parameters.Add(parameter);}return cmd.ExecuteReader();}}}public static DataTable ExecuteDataTable(string sql, params SqlParameter[] parameters){string constr =ConfigurationManager.ConnectionStrings["constr"].ConnectionString;using (SqlConnection con = new SqlConnection(constr)){con.Open();using (SqlCommand cmd = con.CreateCommand()){mandText = sql;foreach (SqlParameter parameter in parameters){cmd.Parameters.Add(parameter);}DataSet dt = new DataSet();SqlDataAdapter dataadapetr = new SqlDataAdapter(cmd);dataadapetr.Fill(dt);DataTable datatable = dt.Tables[0];return datatable;}}}}}。
C#执行多条SQL语句,实现数据库事务(通过Hashtable存储数据).
C#执⾏多条SQL语句,实现数据库事务(通过Hashtable存储数据).1)Web.config中添加连接数据库的语句<add key="ConnectionString" value="server=./sqlexpress;database=transactionDemo;uid=sa;pwd=123456"/>2)在表现层Default.aspx.cs中添加多条需要插⼊数据库的数据。
public void Add(){List<Maticsoft.Model.ClassDemo> modellist = new List<Maticsoft.Model.ClassDemo>();modellist.Add(new Maticsoft.Model.ClassDemo("张三1", "浙江1"));modellist.Add(new Maticsoft.Model.ClassDemo("张三2", "浙江2"));modellist.Add(new Maticsoft.Model.ClassDemo("张三3张三3张三3张三3", "浙江3"));bll.Add(modellist);}3)在业务逻辑层ClassDemo.cs中添加业务逻辑public void Add(List<Maticsoft.Model.ClassDemo> modellist){dal.Add(modellist);}4)在数据访问层ClassDemo.cs、DbHelperSQL.cs中添加将数据插⼊数据库/// <summary>/// 通过事务添加多条数据/// </summary>/// <param name="modellist"></param>public void Add(List<Maticsoft.Model.ClassDemo> modellist){Hashtable SQLStringList = new Hashtable();for (int i = 0; i < modellist.Count;i++ ){SqlParameter[] parameters = {new SqlParameter(string.Format("@name{0}",i), SqlDbType.NVarChar,50),new SqlParameter(string.Format("@address{0}",i), SqlDbType.NVarChar,50)};parameters[0].Value = modellist[i].name;parameters[1].Value = modellist[i].address;SQLStringList.Add(string.Format("insert into ClassDemo (name,address) values (@name{0},@address{0})", i), parameters);}DbHelperSQL.ExecuteSqlTran(SQLStringList);}public static string connectionString = ConfigurationManager.AppSettings["ConnectionString"].ToString();/// <summary>/// 执⾏多条SQL语句,实现数据库事务。
C#DBHelper数据库连接帮助类
C#DBHelper数据库连接帮助类DBHelper 帮助类1.作⽤:将C#应⽤程序与SQL SERVER数据库交互的公共⽅法(增删改查)提取出来,⽅便调⽤。
2.要求:C#⼊门级程序员必须熟练掌握编写3.组成:三个公⽤⽅法。
①ExecuteNonQuery 增删改②ExecuteScalar 查询返回单⾏单列③ExecuteQuery 查询返回多⾏多列4.代码明细:public class DBHelper{public static string strConn = "Server=01D023*********;uid=CG;pwd=abc.1234;Database=QQChat";///<summary>///增、删、改通⽤⽅法///</summary>///<param name="Sql">SQL 语句</param>///<param name="paras">可选参数</param>///<returns></returns>public static int ExecuteNonQuery(string Sql, params SqlParameter[] paras){int result = 0;//using ⾃动关闭资源,⾃带异常处理机制using (SqlConnection conn = new SqlConnection(strConn)){conn.Open();//打开连接SqlCommand command = new SqlCommand(Sql, conn);//执⾏命令command.Parameters.AddRange(paras);//加⼊参数result = command.ExecuteNonQuery(); //执⾏}return result;}///<summary>///查询单⾏当列///</summary>///<param name="Sql">SQL 语句</param>///<param name="paras">可选参数</param>///<returns></returns>public static Object ExecuteScalar(string Sql, params SqlParameter[] paras){Object result;//using ⾃动关闭资源,⾃带异常处理机制using (SqlConnection conn = new SqlConnection(strConn)){conn.Open();//打开连接SqlCommand command = new SqlCommand(Sql, conn);//执⾏命令command.Parameters.AddRange(paras);//加⼊参数result = command.ExecuteScalar(); //执⾏}return result;}///<summary>///查询返回多⾏多列;泛型升级未知对象类型;泛型类,泛型⽅法///</summary>///<param name="Sql">SQL 语句</param>///<param name="paras">可选参数</param>///<returns></returns>public static List<T> ExecuteQuery<T>(string Sql, params SqlParameter[] paras){List<T> list = new List<T>();//创建泛型集合对象using (SqlConnection conn = new SqlConnection(strConn)){conn.Open();//打开连接SqlCommand command = new SqlCommand(Sql, conn);//执⾏命令command.Parameters.AddRange(paras);//加⼊参数using (SqlDataReader reader = command.ExecuteReader())//执⾏游标{Type type = typeof(T);//检测类型//next 往下执⾏while (reader.Read()){//创建对象T t=(T)Activator.CreateInstance(type);foreach(PropertyInfo pi in type.GetProperties()) //反射 PropertyInfo类获取基类的属性{pi.SetValue(t, reader[] is DBNull ? null:reader[]); //ORM 将游标的值赋给对象 }list.Add(t);}}}return list;}}}。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
dbhelpersql数据操作类dbhelper.cs
其实,微软的企业库中有一个非常不错的数据操作类了.但是,不少公司(起码我遇到的几个...),对一些"封装"了些什么的东西不太敢用,虽然我推荐过微软的企业库框架了...但是还是要"评估"...一评就是几个月...而且,一些公司有的根本就是裸开发,或者自己封装的数据库操作类非常别扭,很不好用.
这里我给大家共享一个我参照企业库中的数据操作组件编码风格写的数据库操作类,对使用它的程序员来说,编码是很舒服滴(起码我觉得很好撒).以下是代码,很简单的,没有做任何多余的封装,只是改变了的编码步骤,方便了具体开发数据库操作代码的程序员.
using System;
using System.Data;
using mon;
using System.Configuration; public class DbHelper public class Trans : IDisposable
那么如何使用它呢?下面我给出一些基本的使用示例,基本能满足你大部分的数据库操作需要了.
1)直接执行sql语句
DbHelper db = new DbHelper();
DbCommand cmd =
db.GetSqlStringCommond("insert t1 (id)values('haha')");
db.ExecuteNonQuery(cmd);
2)执行存储过程
DbHelper db = new DbHelper();
DbCommand cmd =
db.GetStoredProcCommond("t1_insert");
db.AddInParameter(cmd, "@id", DbType.String, "heihei");
db.ExecuteNonQuery(cmd);
3)返回DataSet
DbHelper db = new DbHelper();
DbCommand cmd =
db.GetSqlStringCommond("select * from t1");
DataSet ds = db.ExecuteDataSet(cmd);
4)返回DataTable
DbHelper db = new DbHelper();
DbCommand cmd =
db.GetSqlStringCommond("t1_findall");
DataTable dt = db.ExecuteDataTable(cmd);
5)输入参数/输出参数/返回值的使用(比较重要哦)
DbHelper db = new DbHelper();
DbCommand cmd =
db.GetStoredProcCommond("t2_insert");
db.AddInParameter(cmd, "@timeticks", DbType.Int64, DateTime.Now.Ticks);
db.AddOutParameter(cmd, "@outString",
DbType.String, 20);
db.AddReturnParameter(cmd, "@returnValue", DbType.Int32); db.ExecuteNonQuery(cmd);
string s = db.GetParameter(cmd, "@outString").Value as string;//out parameter
int r = Convert.ToInt32(db.GetParameter(cmd,
"@returnValue").Value);//return value
6)DataReader使用
DbHelper db = new DbHelper();
DbCommand cmd =
db.GetStoredProcCommond("t2_insert");
db.AddInParameter(cmd, "@timeticks", DbType.Int64, DateTime.Now.Ticks);
db.AddOutParameter(cmd, "@outString",
DbType.String, 20);
db.AddReturnParameter(cmd, "@returnValue", DbType.Int32); using (DbDataReader reader =
db.ExecuteReader(cmd))
{
dt.Load(reader);
}
string s = db.GetParameter(cmd, "@outString").Value as string;//out parameter
int r = Convert.ToInt32(db.GetParameter(cmd,
"@returnValue").Value);//return value7)事务的使用.(项目中需要将基本的数据库操作组合成一个完整的业务流时,代码级的事务是必不可少的哦)
pubic void DoBusiness()
{
using (Trans t = new Trans())
{
try
{
D1(t);
throw new Exception();//如果有异常,会回
滚滴
D2(t);
mit();
}
catch
{
t.RollBack();
}
}
}
public void D1(Trans t)
{
DbHelper db = new DbHelper();
DbCommand cmd =
db.GetStoredProcCommond("t2_insert");
db.AddInParameter(cmd, "@timeticks", DbType.Int64, DateTime.Now.Ticks);
db.AddOutParameter(cmd, "@outString",
DbType.String, 20);
db.AddReturnParameter(cmd, "@returnValue", DbType.Int32); if (t == null)
db.ExecuteNonQuery(cmd);
else db.ExecuteNonQuery(cmd,t); string s = db.GetParameter(cmd, "@outString").Value as string;//out parameter
int r = Convert.ToInt32(db.GetParameter(cmd,
"@returnValue").Value);//return value
}
public void D2(Trans t)
{
DbHelper db = new DbHelper();
DbCommand cmd =
db.GetSqlStringCommond("insert t1 (id)values('..')");
if (t == null) db.ExecuteNonQuery(cmd);
else db.ExecuteNonQuery(cmd, t);
}
以上我们好像没有指定数据库连接字符串,大家如果看下DbHelper的代码,就知道要使用它必须在config中配置两个参数,如下:
<appSettings>
<add key="DbHelperProvider"
value="System.Data.SqlClient"/>
<add key="DbHelperConnectionString"
value="Data Source=(local);Initial
Catalog=DbHelperTest;Persist Security Info=True;User
ID=sa;Password=sa"/>
</appSettings>其实,DbHelper需要的仅仅是两个字符串,你可以自己修改,作成加密什么的...好了,就这
样,DbHelper的代码是非常简单和透明的,只是在上做了一点小包装,改变了一下使用它的程序员的编码方式,去除掉一些比较"物理级"的编程概念,如connection的open和close之类的,使程序员更专注于业务逻辑代码的编写,少死掉点脑细胞,另外,统一了数据操作层的数据操作代码的风格和格式,维护起来很方便的撒~~~另:以上代码大家可以随意使用, 不需要给我版权费的啦,嘿嘿.如果大家发现有什么BUG,或者有更好的数据操作类的实现方式,请联系我哦.。