SqlHelper封装
首先,SqlHelper要定义为抽象类型的。原因:抽象类型的不能实例化。
其次,抽象的SqlHelper中的函数类型为Static静态的。原因:非静态的抽象类中的函数不引用不能使用。
1,框架
1 public abstract class SqlHelper 2 { 3 //数据库连接字符串 4 public static string connectionString = ConnectionString; //读取配置文件中的连接字符串 5 public SqlHelper() 6 { 7 } 8 }
2,不带参数的操作
2.1查询
1 /// <summary> 2 /// 执行查询语句,返回SqlDataReader ( 注意:调用该方法后,一定要对SqlDataReader进行Close ) 3 /// </summary> 4 /// <param name="strSQL">查询语句</param> 5 /// <returns>SqlDataReader</returns> 6 public static SqlDataReader ExecuteReader(string strSQL) 7 { 8 SqlConnection connection = new SqlConnection(connectionString); 9 SqlCommand cmd = new SqlCommand(strSQL, connection); 10 try 11 { 12 connection.Open(); 13 SqlDataReader myReader = cmd.ExecuteReader(CommandBehavior.CloseConnection); 14 return myReader; 15 } 16 catch (System.Data.SqlClient.SqlException e) 17 { 18 throw e; 19 } 20 21 } 22 /// <summary> 23 /// 执行查询语句,返回DataSet 24 /// </summary> 25 /// <param name="SQLString">查询语句</param> 26 /// <returns>DataSet</returns> 27 public static DataSet Query(string SQLString) 28 { 29 using (SqlConnection connection = new SqlConnection(connectionString)) 30 { 31 DataSet ds = new DataSet(); 32 try 33 { 34 connection.Open(); 35 SqlDataAdapter command = new SqlDataAdapter(SQLString, connection); 36 command.Fill(ds, "ds"); 37 } 38 catch (System.Data.SqlClient.SqlException ex) 39 { 40 throw new Exception(ex.Message); 41 } 42 return ds; 43 } 44 }
2.2查询带事务
1 /// <summary> 2 /// 执行多条SQL语句,实现数据库事务。 3 /// </summary> 4 /// <param name="SQLStringList">多条SQL语句的集合</param> 5 public static int ExecuteSqlTran(List<String> SQLStringList) 6 { 7 using (SqlConnection conn = new SqlConnection(connectionString)) 8 { 9 conn.Open(); 10 SqlCommand cmd = new SqlCommand(); 11 cmd.Connection = conn; 12 13 SqlTransaction tx = conn.BeginTransaction();//实例化事务,并开始执行事务 14 cmd.Transaction = tx; 15 try 16 { 17 int count = 0; 18 for (int n = 0; n < SQLStringList.Count; n++) 19 { 20 string strsql = SQLStringList[n]; 21 if (strsql.Trim().Length > 1) 22 { 23 cmd.CommandText = strsql; 24 count += cmd.ExecuteNonQuery(); 25 } 26 } 27 tx.Commit();//提交事务 28 return count; 29 } 30 catch 31 { 32 tx.Rollback();//事务回滚 33 return 0; 34 } 35 } 36 }
3,带参数的查询
3.1存储过程为参数
1 /// <summary> 2 /// 执行带一个存储过程参数的的SQL语句。 3 /// </summary> 4 /// <param name="SQLString">SQL语句</param> 5 /// <param name="content">参数内容,比如一个字段是格式复杂的文章,有特殊符号,可以通过这个方式添加</param> 6 /// <returns>影响的记录数</returns> 7 public static object ExecuteSqlGet(string SQLString, string content) 8 { 9 using (SqlConnection connection = new SqlConnection(connectionString)) 10 { 11 SqlCommand cmd = new SqlCommand(SQLString, connection); 12 System.Data.SqlClient.SqlParameter myParameter = new System.Data.SqlClient.SqlParameter("@content", SqlDbType.NText); 13 myParameter.Value = content; 14 cmd.Parameters.Add(myParameter); 15 try 16 { 17 connection.Open(); 18 object obj = cmd.ExecuteScalar(); 19 if ((Object.Equals(obj, null)) || (Object.Equals(obj, System.DBNull.Value))) 20 { 21 return null; 22 } 23 else 24 { 25 return obj; 26 } 27 } 28 catch (System.Data.SqlClient.SqlException e) 29 { 30 throw e; 31 } 32 finally 33 { 34 cmd.Dispose(); 35 connection.Close(); 36 } 37 } 38 }
3.2查询
1 /// <summary> 2 /// 执行查询语句,返回DataSet 3 /// </summary> 4 /// <param name="SQLString">查询语句</param> 5 /// <returns>DataSet</returns> 6 public static DataSet Query(string SQLString, params SqlParameter[] cmdParms) 7 { 8 using (SqlConnection connection = new SqlConnection(connectionString)) 9 { 10 SqlCommand cmd = new SqlCommand(); 11 PrepareCommand(cmd, connection, null, SQLString, cmdParms); 12 using (SqlDataAdapter da = new SqlDataAdapter(cmd)) 13 { 14 DataSet ds = new DataSet(); 15 try 16 { 17 da.Fill(ds, "ds"); 18 cmd.Parameters.Clear(); 19 } 20 catch (System.Data.SqlClient.SqlException ex) 21 { 22 throw new Exception(ex.Message); 23 } 24 return ds; 25 } 26 } 27 }
准备command,将参数附加上去。
1 private static void PrepareCommand(SqlCommand cmd, SqlConnection conn, SqlTransaction trans, string cmdText, SqlParameter[] cmdParms) 2 { 3 if (conn.State != ConnectionState.Open) 4 conn.Open(); 5 cmd.Connection = conn; 6 cmd.CommandText = cmdText; 7 if (trans != null) 8 cmd.Transaction = trans; 9 cmd.CommandType = CommandType.Text;//cmdType; 10 if (cmdParms != null) 11 { 12 13 14 foreach (SqlParameter parameter in cmdParms) 15 { 16 if ((parameter.Direction == ParameterDirection.InputOutput || parameter.Direction == ParameterDirection.Input) && 17 (parameter.Value == null)) 18 { 19 parameter.Value = DBNull.Value; 20 } 21 cmd.Parameters.Add(parameter); 22 } 23 } 24 }
3.3非查询
1 public static int ExecuteSql(string SQLString, params SqlParameter[] cmdParms) 2 { 3 using (SqlConnection connection = new SqlConnection(connectionString)) 4 { 5 using (SqlCommand cmd = new SqlCommand()) 6 { 7 try 8 { 9 PrepareCommand(cmd, connection, null, SQLString, cmdParms); 10 int rows =cmd.ExecuteNonQuery(); 11 cmd.Parameters.Clear(); 12 return rows; 13 } 14 catch (System.Data.SqlClient.SqlException e) 15 { 16 throw e; 17 } 18 } 19 } 20 }
3.4事务 (参数为哈希函数)
1 /// <summary> 2 /// 执行多条SQL语句,实现数据库事务。 3 /// </summary> 4 /// <param name="SQLStringList">SQL语句的哈希表(key为sql语句,value是该语句的SqlParameter[])</param> 5 public static void ExecuteSqlTran(Hashtable SQLStringList) 6 { 7 using (SqlConnection conn = new SqlConnection(connectionString)) 8 { 9 conn.Open(); 10 using (SqlTransaction trans = conn.BeginTransaction()) 11 { 12 SqlCommand cmd = new SqlCommand(); 13 try 14 { 15 //循环 16 foreach (DictionaryEntry myDE in SQLStringList) 17 { 18 string cmdText = myDE.Key.ToString(); 19 SqlParameter[] cmdParms = (SqlParameter[])myDE.Value; 20 PrepareCommand(cmd, conn, trans, cmdText, cmdParms); 21 int val = cmd.ExecuteNonQuery(); 22 cmd.Parameters.Clear(); 23 } 24 trans.Commit(); 25 } 26 catch 27 { 28 trans.Rollback(); 29 throw; 30 } 31 } 32 } 33 }
1 /// <summary> 2 /// 执行多条SQL语句,实现数据库事务。 3 /// </summary> 4 /// <param name="SQLStringList">SQL语句的哈希表(key为sql语句,value是该语句的SqlParameter[])</param> 5 public static int ExecuteSqlTran(System.Collections.Generic.List<CommandInfo> cmdList) 6 { 7 using (SqlConnection conn = new SqlConnection(connectionString)) 8 { 9 conn.Open(); 10 using (SqlTransaction trans = conn.BeginTransaction()) 11 { 12 SqlCommand cmd = new SqlCommand(); 13 try 14 { int count = 0; 15 //循环 16 foreach (CommandInfo myDE in cmdList) 17 { 18 string cmdText = myDE.CommandText; 19 SqlParameter[] cmdParms = (SqlParameter[])myDE.Parameters; 20 PrepareCommand(cmd, conn, trans, cmdText, cmdParms); 21 22 if (myDE.EffentNextType == EffentNextType.WhenHaveContine || myDE.EffentNextType == EffentNextType.WhenNoHaveContine) 23 { 24 if (myDE.CommandText.ToLower().IndexOf("count(") == -1) 25 { 26 trans.Rollback(); 27 return 0; 28 } 29 30 object obj = cmd.ExecuteScalar(); 31 bool isHave = false; 32 if (obj == null && obj == DBNull.Value) 33 { 34 isHave = false; 35 } 36 isHave = Convert.ToInt32(obj) > 0; 37 38 if (myDE.EffentNextType == EffentNextType.WhenHaveContine && !isHave) 39 { 40 trans.Rollback(); 41 return 0; 42 } 43 if (myDE.EffentNextType == EffentNextType.WhenNoHaveContine && isHave) 44 { 45 trans.Rollback(); 46 return 0; 47 } 48 continue; 49 } 50 int val = cmd.ExecuteNonQuery(); 51 count += val; 52 if (myDE.EffentNextType == EffentNextType.ExcuteEffectRows && val == 0) 53 { 54 trans.Rollback(); 55 return 0; 56 } 57 cmd.Parameters.Clear(); 58 } 59 trans.Commit(); 60 return count; 61 } 62 catch 63 { 64 trans.Rollback(); 65 throw; 66 } 67 } 68 } 69 }
附:
1 namespace DBUtility 2 { 3 public enum EffentNextType 4 { 5 /// <summary> 6 /// 对其他语句无任何影响 7 /// </summary> 8 None, 9 /// <summary> 10 /// 当前语句必须为"select count(1) from .."格式,如果存在则继续执行,不存在回滚事务 11 /// </summary> 12 WhenHaveContine, 13 /// <summary> 14 /// 当前语句必须为"select count(1) from .."格式,如果不存在则继续执行,存在回滚事务 15 /// </summary> 16 WhenNoHaveContine, 17 /// <summary> 18 /// 当前语句影响到的行数必须大于0,否则回滚事务 19 /// </summary> 20 ExcuteEffectRows, 21 /// <summary> 22 /// 引发事件-当前语句必须为"select count(1) from .."格式,如果不存在则继续执行,存在回滚事务 23 /// </summary> 24 SolicitationEvent 25 } 26 public class CommandInfo 27 { 28 public object ShareObject = null; 29 public object OriginalData = null; 30 event EventHandler _solicitationEvent; 31 public event EventHandler SolicitationEvent 32 { 33 add 34 { 35 _solicitationEvent += value; 36 } 37 remove 38 { 39 _solicitationEvent -= value; 40 } 41 } 42 public void OnSolicitationEvent() 43 { 44 if (_solicitationEvent != null) 45 { 46 _solicitationEvent(this,new EventArgs()); 47 } 48 } 49 public string CommandText; 50 public System.Data.Common.DbParameter[] Parameters; 51 public EffentNextType EffentNextType = EffentNextType.None; 52 public CommandInfo() 53 { 54 55 } 56 public CommandInfo(string sqlText, SqlParameter[] para) 57 { 58 this.CommandText = sqlText; 59 this.Parameters = para; 60 } 61 public CommandInfo(string sqlText, SqlParameter[] para, EffentNextType type) 62 { 63 this.CommandText = sqlText; 64 this.Parameters = para; 65 this.EffentNextType = type; 66 } 67 } 68 }
                    
                
                
            
        
浙公网安备 33010602011771号