加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

数据访问基础类(基于SQLServer)

发布时间:2020-12-12 16:01:51 所属栏目:MsSql教程 来源:网络整理
导读:using System; using System.Collections; using System.Collections.Specialized; using System.Data; using System.Data.SqlClient; using System.Configuration; namespace LiTianPing.SQLServerDAL //可以修改成实际项目的命名空间名称 { ?/// summary ?

using System;
using System.Collections;
using System.Collections.Specialized;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;

namespace LiTianPing.SQLServerDAL //可以修改成实际项目的命名空间名称
{
?/// <summary>
?/// Copyright (C) 2004-2008 LiTianPing
?/// 数据访问基础类(基于SQLServer)
?/// 用户可以修改满足自己项目的需要。
?/// </summary>
?public abstract class DbHelperSQL
?{
??//数据库连接字符串(web.config来配置)
??//<add key="ConnectionString" value="server=127.0.0.1;database=DATABASE;uid=sa;pwd=" />??
??protected static string connectionString = ConfigurationSettings.AppSettings["ConnectionString"];
??public DbHelperSQL()
??{???
??}

??#region 公用方法

??public static int GetMaxID(string FieldName,string TableName)
??{
???string strsql = "select max(" + FieldName + ")+1 from " + TableName;
???object obj = GetSingle(strsql);
???if (obj == null)
???{
????return 1;
???}
???else
???{
????return int.Parse(obj.ToString());
???}
??}
??public static bool Exists(string strSql,params SqlParameter[] cmdParms)
??{
???object obj = GetSingle(strSql,cmdParms);
???int cmdresult;
???if ((Object.Equals(obj,null)) || (Object.Equals(obj,System.DBNull.Value)))
???{
????cmdresult = 0;
???}
???else
???{
????cmdresult = int.Parse(obj.ToString());
???}
???if (cmdresult == 0)
???{
????return false;
???}
???else
???{
????return true;
???}
??}
??#endregion

??#region? 执行简单SQL语句

??/// <summary>
??/// 执行SQL语句,返回影响的记录数
??/// </summary>
??/// <param name="SQLString">SQL语句</param>
??/// <returns>影响的记录数</returns>
??public static int ExecuteSql(string SQLString)
??{
???using (SqlConnection connection = new SqlConnection(connectionString))
???{????
????using (SqlCommand cmd = new SqlCommand(SQLString,connection))
????{
?????try
?????{??
??????connection.Open();
??????int rows=cmd.ExecuteNonQuery();
??????return rows;
?????}
?????catch(System.Data.SqlClient.SqlException E)
?????{?????
??????connection.Close();
??????throw new Exception(E.Message);
?????}
????}????
???}
??}
??
??/// <summary>
??/// 执行多条SQL语句,实现数据库事务。
??/// </summary>
??/// <param name="SQLStringList">多条SQL语句</param>??
??public static void ExecuteSqlTran(ArrayList SQLStringList)
??{
???using (SqlConnection conn = new SqlConnection(connectionString))
???{
????conn.Open();
????SqlCommand cmd = new SqlCommand();
????cmd.Connection=conn;????
????SqlTransaction tx=conn.BeginTransaction();???
????cmd.Transaction=tx;????
????try
????{?? ??
?????for(int n=0;n<SQLStringList.Count;n++)
?????{
??????string strsql=SQLStringList[n].ToString();
??????if (strsql.Trim().Length>1)
??????{
???????cmd.CommandText=strsql;
???????cmd.ExecuteNonQuery();
??????}
?????}??????????
?????tx.Commit();?????
????}
????catch(System.Data.SqlClient.SqlException E)
????{??
?????tx.Rollback();
?????throw new Exception(E.Message);
????}
???}
??}
??/// <summary>
??/// 执行带一个存储过程参数的的SQL语句。
??/// </summary>
??/// <param name="SQLString">SQL语句</param>
??/// <param name="content">参数内容,比如一个字段是格式复杂的文章,有特殊符号,可以通过这个方式添加</param>
??/// <returns>影响的记录数</returns>
??public static int ExecuteSql(string SQLString,string content)
??{????
???using (SqlConnection connection = new SqlConnection(connectionString))
???{
????SqlCommand cmd = new SqlCommand(SQLString,connection);??
????System.Data.SqlClient.SqlParameter? myParameter = new System.Data.SqlClient.SqlParameter ( "@content",SqlDbType.NText);
????myParameter.Value = content ;
????cmd.Parameters.Add(myParameter);
????try
????{
?????connection.Open();
?????int rows=cmd.ExecuteNonQuery();
?????return rows;
????}
????catch(System.Data.SqlClient.SqlException E)
????{????
?????throw new Exception(E.Message);
????}
????finally
????{
?????cmd.Dispose();
?????connection.Close();
????}?
???}
??}??
??/// <summary>
??/// 向数据库里插入图像格式的字段(和上面情况类似的另一种实例)
??/// </summary>
??/// <param name="strSQL">SQL语句</param>
??/// <param name="fs">图像字节,数据库的字段类型为image的情况</param>
??/// <returns>影响的记录数</returns>
??public static int ExecuteSqlInsertImg(string strSQL,byte[] fs)
??{??
???using (SqlConnection connection = new SqlConnection(connectionString))
???{
????SqlCommand cmd = new SqlCommand(strSQL,connection);?
????System.Data.SqlClient.SqlParameter? myParameter = new System.Data.SqlClient.SqlParameter ( "@fs",SqlDbType.Image);
????myParameter.Value = fs ;
????cmd.Parameters.Add(myParameter);
????try
????{
?????connection.Open();
?????int rows=cmd.ExecuteNonQuery();
?????return rows;
????}
????catch(System.Data.SqlClient.SqlException E)
????{????
?????throw new Exception(E.Message);
????}
????finally
????{
?????cmd.Dispose();
?????connection.Close();
????}????
???}
??}
??
??/// <summary>
??/// 执行一条计算查询结果语句,返回查询结果(object)。
??/// </summary>
??/// <param name="SQLString">计算查询结果语句</param>
??/// <returns>查询结果(object)</returns>
??public static object GetSingle(string SQLString)
??{
???using (SqlConnection connection = new SqlConnection(connectionString))
???{
????using(SqlCommand cmd = new SqlCommand(SQLString,connection))
????{
?????try
?????{
??????connection.Open();
??????object obj = cmd.ExecuteScalar();
??????if((Object.Equals(obj,null))||(Object.Equals(obj,System.DBNull.Value)))
??????{?????
???????return null;
??????}
??????else
??????{
???????return obj;
??????}????
?????}
?????catch(System.Data.SqlClient.SqlException e)
?????{??????
??????connection.Close();
??????throw new Exception(e.Message);
?????}?
????}
???}
??}
??/// <summary>
??/// 执行查询语句,返回SqlDataReader
??/// </summary>
??/// <param name="strSQL">查询语句</param>
??/// <returns>SqlDataReader</returns>
??public static SqlDataReader ExecuteReader(string strSQL)
??{
???SqlConnection connection = new SqlConnection(connectionString);???
???SqlCommand cmd = new SqlCommand(strSQL,connection);????
???try
???{
????connection.Open();?
????SqlDataReader myReader = cmd.ExecuteReader();
????return myReader;
???}
???catch(System.Data.SqlClient.SqlException e)
???{????????
????throw new Exception(e.Message);
???}???
???
??}??
??/// <summary>
??/// 执行查询语句,返回DataSet
??/// </summary>
??/// <param name="SQLString">查询语句</param>
??/// <returns>DataSet</returns>
??public static DataSet Query(string SQLString)
??{
???using (SqlConnection connection = new SqlConnection(connectionString))
???{
????DataSet ds = new DataSet();
????try
????{
?????connection.Open();
?????SqlDataAdapter command = new SqlDataAdapter(SQLString,connection);????
?????command.Fill(ds,"ds");
????}
????catch(System.Data.SqlClient.SqlException ex)
????{????
?????throw new Exception(ex.Message);
????}???
????return ds;
???}???
??}


??#endregion

??#region 执行带参数的SQL语句

??/// <summary>
??/// 执行SQL语句,返回影响的记录数
??/// </summary>
??/// <param name="SQLString">SQL语句</param>
??/// <returns>影响的记录数</returns>
??public static int ExecuteSql(string SQLString,params SqlParameter[] cmdParms)
??{
???using (SqlConnection connection = new SqlConnection(connectionString))
???{????
????using (SqlCommand cmd = new SqlCommand())
????{
?????try
?????{??
??????PrepareCommand(cmd,connection,null,SQLString,cmdParms);
??????int rows=cmd.ExecuteNonQuery();
??????cmd.Parameters.Clear();
??????return rows;
?????}
?????catch(System.Data.SqlClient.SqlException E)
?????{????
??????throw new Exception(E.Message);
?????}
????}????
???}
??}
??
???
??/// <summary>
??/// 执行多条SQL语句,实现数据库事务。
??/// </summary>
??/// <param name="SQLStringList">SQL语句的哈希表(key为sql语句,value是该语句的SqlParameter[])</param>
??public static void ExecuteSqlTran(Hashtable SQLStringList)
??{???
???using (SqlConnection conn = new SqlConnection(connectionString))
???{
????conn.Open();
????using (SqlTransaction trans = conn.BeginTransaction())
????{
?????SqlCommand cmd = new SqlCommand();
?????try
?????{
??????//循环
??????foreach (DictionaryEntry myDE in SQLStringList)
??????{?
???????string ?cmdText=myDE.Key.ToString();
???????SqlParameter[] cmdParms=(SqlParameter[])myDE.Value;
???????PrepareCommand(cmd,conn,trans,cmdText,cmdParms);
???????int val = cmd.ExecuteNonQuery();
???????cmd.Parameters.Clear();

???????trans.Commit();
??????}?????
?????}
?????catch
?????{
??????trans.Rollback();
??????throw;
?????}
????}????
???}
??}
?
????
??/// <summary>
??/// 执行一条计算查询结果语句,返回查询结果(object)。
??/// </summary>
??/// <param name="SQLString">计算查询结果语句</param>
??/// <returns>查询结果(object)</returns>
??public static object GetSingle(string SQLString,params SqlParameter[] cmdParms)
??{
???using (SqlConnection connection = new SqlConnection(connectionString))
???{
????using (SqlCommand cmd = new SqlCommand())
????{
?????try
?????{
??????PrepareCommand(cmd,cmdParms);
??????object obj = cmd.ExecuteScalar();
??????cmd.Parameters.Clear();
??????if((Object.Equals(obj,System.DBNull.Value)))
??????{?????
???????return null;
??????}
??????else
??????{
???????return obj;
??????}????
?????}
?????catch(System.Data.SqlClient.SqlException e)
?????{????
??????throw new Exception(e.Message);
?????}?????
????}
???}
??}
??
??/// <summary>
??/// 执行查询语句,返回SqlDataReader
??/// </summary>
??/// <param name="strSQL">查询语句</param>
??/// <returns>SqlDataReader</returns>
??public static SqlDataReader ExecuteReader(string SQLString,params SqlParameter[] cmdParms)
??{??
???SqlConnection connection = new SqlConnection(connectionString);
???SqlCommand cmd = new SqlCommand();????
???try
???{
????PrepareCommand(cmd,cmdParms);
????SqlDataReader myReader = cmd.ExecuteReader();
????cmd.Parameters.Clear();
????return myReader;
???}
???catch(System.Data.SqlClient.SqlException e)
???{????????
????throw new Exception(e.Message);
???}?????
???
??}??
??
??/// <summary>
??/// 执行查询语句,返回DataSet
??/// </summary>
??/// <param name="SQLString">查询语句</param>
??/// <returns>DataSet</returns>
??public static DataSet Query(string SQLString,params SqlParameter[] cmdParms)
??{
???using (SqlConnection connection = new SqlConnection(connectionString))
???{
????SqlCommand cmd = new SqlCommand();
????PrepareCommand(cmd,cmdParms);
????using( SqlDataAdapter da = new SqlDataAdapter(cmd) )
????{
?????DataSet ds = new DataSet();?
?????try
?????{????????????
??????da.Fill(ds,"ds");
??????cmd.Parameters.Clear();
?????}
?????catch(System.Data.SqlClient.SqlException ex)
?????{????
??????throw new Exception(ex.Message);
?????}???
?????return ds;
????}????
???}???
??}


??private static void PrepareCommand(SqlCommand cmd,SqlConnection conn,SqlTransaction trans,string cmdText,SqlParameter[] cmdParms)
??{
???if (conn.State != ConnectionState.Open)
????conn.Open();
???cmd.Connection = conn;
???cmd.CommandText = cmdText;
???if (trans != null)
????cmd.Transaction = trans;
???cmd.CommandType = CommandType.Text;//cmdType;
???if (cmdParms != null)
???{
????foreach (SqlParameter parm in cmdParms)
?????cmd.Parameters.Add(parm);
???}
??}

??#endregion

??#region 存储过程操作

??/// <summary>
??/// 执行存储过程
??/// </summary>
??/// <param name="storedProcName">存储过程名</param>
??/// <param name="parameters">存储过程参数</param>
??/// <returns>SqlDataReader</returns>
??public static SqlDataReader RunProcedure(string storedProcName,IDataParameter[] parameters )
??{
???SqlConnection connection = new SqlConnection(connectionString);
???SqlDataReader returnReader;
???connection.Open();
???SqlCommand command = BuildQueryCommand( connection,storedProcName,parameters );
???command.CommandType = CommandType.StoredProcedure;
???returnReader = command.ExecuteReader();????
???return returnReader;???
??}
??
??
??/// <summary>
??/// 执行存储过程
??/// </summary>
??/// <param name="storedProcName">存储过程名</param>
??/// <param name="parameters">存储过程参数</param>
??/// <param name="tableName">DataSet结果中的表名</param>
??/// <returns>DataSet</returns>
??public static DataSet RunProcedure(string storedProcName,IDataParameter[] parameters,string tableName )
??{
???using (SqlConnection connection = new SqlConnection(connectionString))
???{
????DataSet dataSet = new DataSet();
????connection.Open();
????SqlDataAdapter sqlDA = new SqlDataAdapter();
????sqlDA.SelectCommand = BuildQueryCommand(connection,parameters );
????sqlDA.Fill( dataSet,tableName );
????connection.Close();
????return dataSet;
???}
??}

??
??/// <summary>
??/// 构建 SqlCommand 对象(用来返回一个结果集,而不是一个整数值)
??/// </summary>
??/// <param name="connection">数据库连接</param>
??/// <param name="storedProcName">存储过程名</param>
??/// <param name="parameters">存储过程参数</param>
??/// <returns>SqlCommand</returns>
??private static SqlCommand BuildQueryCommand(SqlConnection connection,string storedProcName,IDataParameter[] parameters)
??{???
???SqlCommand command = new SqlCommand( storedProcName,connection );
???command.CommandType = CommandType.StoredProcedure;
???foreach (SqlParameter parameter in parameters)
???{
????command.Parameters.Add( parameter );
???}
???return command;???
??}
??
??/// <summary>
??/// 执行存储过程,返回影响的行数??
??/// </summary>
??/// <param name="storedProcName">存储过程名</param>
??/// <param name="parameters">存储过程参数</param>
??/// <param name="rowsAffected">影响的行数</param>
??/// <returns></returns>
??public static int RunProcedure(string storedProcName,out int rowsAffected )
??{
???using (SqlConnection connection = new SqlConnection(connectionString))
???{
????int result;
????connection.Open();
????SqlCommand command = BuildIntCommand(connection,parameters );
????rowsAffected = command.ExecuteNonQuery();
????result = (int)command.Parameters["ReturnValue"].Value;
????//Connection.Close();
????return result;
???}
??}
??
??/// <summary>
??/// 创建 SqlCommand 对象实例(用来返回一个整数值)?
??/// </summary>
??/// <param name="storedProcName">存储过程名</param>
??/// <param name="parameters">存储过程参数</param>
??/// <returns>SqlCommand 对象实例</returns>
??private static SqlCommand BuildIntCommand(SqlConnection connection,IDataParameter[] parameters)
??{
???SqlCommand command = BuildQueryCommand(connection,parameters );
???command.Parameters.Add( new SqlParameter ( "ReturnValue",
????SqlDbType.Int,4,ParameterDirection.ReturnValue,
????false,string.Empty,DataRowVersion.Default,null ));
???return command;
??}
??#endregion?

?}}?

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读