/// |
/// 枚举查询排序方式 |
/// |
public enum OrderType |
{ |
DESC, |
ASC |
} |
public sealed class SqlComposition |
{ |
#region Select语句的组合 |
/// |
/// 组合查询语句 |
/// |
/// 字段名称 |
/// 数据库表名,可以传入一个组合的语句 |
/// 查询条件 |
/// 排序字段 |
/// 排序方式 |
/// 返回组合的语句 |
public String SelectSql ( String fieldName, String tableName, String strWhere, String orderField, OrderType ot ) |
{ |
if ( String.IsNullOrEmpty ( tableName ) ) |
{ |
return null; |
} |
StringBuilder sb = new StringBuilder(); |
sb.Append ( " SELECT " ); |
if ( String.IsNullOrEmpty ( fieldName ) ) |
{ |
sb.Append ( " * " ); |
} |
else |
{ |
sb.Append ( fieldName ); |
} |
sb.Append ( " FROM " ); |
sb.Append ( tableName ); |
if ( !String.IsNullOrEmpty ( strWhere ) ) |
{ |
sb.Append ( " WHERE " ); |
sb.Append ( strWhere ); |
} |
if ( !String.IsNullOrEmpty ( orderField ) ) |
{ |
sb.Append ( " ORDER BY " ); |
sb.Append ( orderField ); |
switch ( ot ) |
{ |
case OrderType.ASC: |
sb.Append ( " ASC " ); |
break ; |
case OrderType.DESC: |
default : |
sb.Append ( " DESC " ); |
break ; |
} |
} |
return sb.ToString(); |
} |
/// |
/// 组合查询语句,默认降序排列 |
/// |
/// 字段名称 |
/// 数据库表名,可以传入一个组合的语句 |
/// 查询条件 |
/// 排序字段 |
/// 返回组合的语句 |
public String SelectSql ( String fieldName, String tableName, String strWhere, String orderField ) |
{ |
return SelectSql ( fieldName, tableName, strWhere, orderField, OrderType.DESC ); |
} |
/// |
/// 组合查询语句,无查询条件 |
/// |
/// 字段名称 |
/// 数据库表名,可以传入一个组合的语句 |
/// 排序方式 |
/// 排序字段 |
/// 返回组合的语句 |
public String SelectSql ( String fieldName, String tableName, OrderType ot, String orderField ) |
{ |
return SelectSql ( fieldName, tableName, null, orderField, ot ); |
} |
/// |
/// 组合查询语句,无查询字段 |
/// |
/// 数据库表名,可以传入一个组合的语句 |
/// 查询条件 |
/// 排序字段 |
/// 排序方式 |
/// 返回组合的语句 |
public String SelectSql ( String tableName, String strWhere, String orderField, OrderType ot ) |
{ |
return SelectSql ( null, tableName, strWhere, orderField, ot ); |
} |
/// |
/// 组合查询语句,无排序方式 |
/// |
/// 查询字段 |
/// 数据库表名,可以传入一个组合的语句 |
/// 查询条件 |
/// 返回组合的语句 |
public String SelectSql ( String fieldName, String tableName, String strWhere ) |
{ |
return SelectSql ( fieldName, tableName, strWhere, null ); |
} |
/// |
/// 组合查询语句 |
/// |
/// 查询字段 |
/// 表名,可以传入一个组合的语句 |
/// 返回组合的语句 |
public String SelectSql ( String fieldName, String tableName ) |
{ |
return SelectSql ( fieldName, tableName, null ); |
} |
/// |
/// 组合查询语句 |
/// |
/// 数据库表名,可以传入一个组合的语句 |
/// 返回组合的语句 |
public String SelectSql ( String tableName ) |
{ |
return SelectSql ( null, tableName ); |
} |
/// |
/// 组合查询语句 |
/// |
/// 需要查询的表名集合 |
/// 需要进行连接的字符串 |
/// 需要查询的字段,用来判断是否允许删除的字段 |
/// 需要查询的表名,主要是防止字段名称重复 |
/// 需要查询的条件,如果有相同的字段,请加上表名 |
/// 返回组合的语句 |
public String SelectSql ( ArrayList al, String fieldName, String searchFieldName, String searchTableName, String strWhere ) |
{ |
StringBuilder sb = new StringBuilder(); |
for ( int i = 0; i < al.Count; i++ ) |
{ |
if ( i == 0 ) |
{ |
if ( !String.IsNullOrEmpty ( searchFieldName ) ) |
{ |
if ( !String.IsNullOrEmpty ( searchTableName ) ) |
{ |
sb.Append ( SelectSql ( searchTableName + "." + searchFieldName, al[0].ToString() ) ); |
} |
else |
{ |
sb.Append ( SelectSql ( searchFieldName, al[0].ToString() ) ); |
} |
} |
else |
{ |
sb.Append ( SelectSql ( al[0].ToString() ) ); |
} |
} |
else |
{ |
sb.Append ( " inner join " ); |
sb.Append ( al[i] ); |
sb.Append ( " on " ); |
sb.Append ( al[0] + "." + fieldName ); |
sb.Append ( "=" ); |
sb.Append ( al[i] + "." + fieldName ); |
} |
} |
if ( String.IsNullOrEmpty ( strWhere ) ) |
{ |
sb.Append ( " WHERE " ); |
sb.Append ( strWhere ); |
} |
return sb.ToString(); |
} |
/// |
/// 组合查询语句 |
/// |
/// 需要查询的表名集合 |
/// 需要进行连接的字符串 |
/// 需要查询的字段,用来判断是否允许删除的字段 |
/// 需要查询的条件,如果有相同的字段,请加上表名 |
/// 返回组合的语句 |
public String SelectSql ( ArrayList al, String fieldName, String searchFieldName, String strWhere ) |
{ |
return SelectSql ( al, fieldName, searchFieldName, null, strWhere ); |
} |
/// |
/// 组合查询语句 |
/// |
/// 需要查询的表名集合 |
/// 需要进行连接的字符串 |
/// 需要查询的字段,用来判断是否允许删除的字段 |
/// 返回组合的语句 |
public String SelectSql ( ArrayList al, String fieldName, String searchFieldName ) |
{ |
return SelectSql ( al, fieldName, searchFieldName, null ); |
} |
//public String SelectSql(Hashtable tablename, Hashtable joinfield, String strWhere) |
//{ |
//StringBuilder sb = new StringBuilder(); |
//StringBuilder sbtable = new StringBuilder(); |
//sb.Append(" select "); |
//foreach (DictionaryEntry ti in tablename) |
//{ |
// sbtable.Append(" "+ti.Key); |
// if ((ti.Value.ToString()).IndexOf(",") > 0) |
// { |
// ArrayList al = (ArrayList)(ti.Value.ToString()).Split(","); |
// for (int i = 0; i < al.Count; i++) |
// { |
// sb.Append(" "+ ti.Key + "." + al[i]); |
// } |
// } |
// else |
// { |
// sb.Append(" " + ti.Key + "." + (ti.Value.ToString())); |
// } |
//} |
//sb.Append(" inner join "); |
//sb.Append(" "+sbtable); |
//sb.Append(" on "); |
//foreach(DictionaryEntry ji in joinfield) |
//{ |
// sb.Append(" " + ji.Key + "." + ji.Value.ToString()+" = "); |
//} |
//sb.Remove(sb.Length - 1, 1); |
//sbtable.Remove(sbtable.Length - 1, 1); |
//if (String.IsNullOrEmpty(strWhere)) |
//{ |
// sb.Append(" WHERE "); |
// sb.Append(strWhere); |
//} |
//return sb.ToString(); |
//} |
#endregion |
/// |
/// 组合更新语句 |
/// |
/// 数据库表名 |
/// Hashtable 用于记录字段名和值 |
/// 更新条件 |
/// 返回Update语句 |
public String UpdateSelect ( String tableName, Hashtable ht, String strWhere ) |
{ |
if ( String.IsNullOrEmpty ( tableName ) || ht.Count == 0 ) |
{ |
return null; |
} |
StringBuilder sb = new StringBuilder(); |
sb.Append ( " UPDATE " ); |
sb.Append ( tableName ); |
sb.Append ( " SET " ); |
foreach ( DictionaryEntry ide in ht ) |
{ |
sb.Append ( ide.Key ); |
sb.Append ( "='" ); |
sb.Append ( ide.Value.ToString().Replace ( "'" , "''" ) ); |
sb.Append ( "'" ); |
sb.Append ( "," ); |
} |
sb.Remove ( sb.Length - 1, 1 ); |
if ( String.IsNullOrEmpty ( strWhere ) ) |
{ |
sb.Append ( " WHERE " ); |
sb.Append ( strWhere ); |
} |
return sb.ToString(); |
} |
/// |
/// 组合虚拟删除语句 |
/// |
/// 数据库表名 |
/// 查询条件 |
/// 返回组合的Sql语 |
public String DeleteSql ( String tableName, String strWhere ) |
{ |
if ( String.IsNullOrEmpty ( tableName ) || String.IsNullOrEmpty ( strWhere ) ) |
{ |
return null; |
} |
StringBuilder sb = new StringBuilder(); |
sb.Append ( " Update " ); |
sb.Append ( tableName ); |
sb.Append ( " set IsDelete=1 " ); |
sb.Append ( " WHERE " ); |
sb.Append ( strWhere ); |
return sb.ToString(); |
} |
/// |
/// 组合彻底删除语句 |
/// |
/// 数据库表名 |
/// 查询条件 |
/// 返回组合的Sql语 |
public String DeleteFactSql ( String tableName, String strWhere ) |
{ |
if ( String.IsNullOrEmpty ( tableName ) || String.IsNullOrEmpty ( strWhere ) ) |
{ |
return null; |
} |
StringBuilder sb = new StringBuilder(); |
sb.Append ( " Delete from " ); |
sb.Append ( tableName ); |
sb.Append ( " WHERE " ); |
sb.Append ( strWhere ); |
return sb.ToString(); |
} |
/// |
/// 组合插入语句 |
/// |
/// 数据库表名 |
/// 记录字段,值的Hashtable |
/// 返回组合的Sql语句 |
public String InsertSql ( String tableName, Hashtable ht ) |
{ |
if ( String.IsNullOrEmpty ( tableName ) || ht.Count == 0 ) |
{ |
return null; |
} |
StringBuilder sb = new StringBuilder(); |
sb.Append ( "INSERT INTO " ); |
sb.Append ( tableName ); |
sb.Append ( "(" ); |
StringBuilder tempSb = new StringBuilder(); |
foreach ( DictionaryEntry ide in ht ) //枚举Hshtable记录的数据 |
{ |
sb.Append ( ide.Key ); |
sb.Append ( "," ); |
tempSb.Append ( "'" ); |
tempSb.Append ( ide.Value.ToString().Replace ( "'" , "''" ) ); |
tempSb.Append ( "'" ); |
tempSb.Append ( "," ); |
} |
sb.Remove ( sb.Length - 1, 1 ); |
tempSb.Remove ( tempSb.Length - 1, 1 ); |
sb.Append ( ") VALUES (" ); |
sb.Append ( tempSb.ToString() ); |
tempSb.Remove ( 0, tempSb.Length ); |
sb.Append ( ")" ); |
return sb.ToString(); |
} |
} |
调用DEMO |
ViewState[ "basedata" ] = Request.QueryString[ "basedata" ].ToString().Trim(); |
ViewState[ "basecode" ] = Request.QueryString[ "basecode" ].ToString().Trim(); |
ViewState[ "basename" ] = Request.QueryString[ "basename" ].ToString().Trim(); |
Hashtable ht= new Hashtable ( 1 ); |
ht.Add ( ViewState[ "basename" ].ToString(), txt_name.Text.Trim() ); |
list.Add ( sc.UpdateSelect ( ViewState[ "basedata" ].ToString(), ht, ViewState[ "basecode" ] + "='" + txt_bianma.Text.Trim() + "'" ) ); |
int updateCount = ExecuteSqlTran ( list ); |
///// |
/// 执行多条SQL语句,实现数据库事务。 |
/// |
/// 多条SQL语句 |
public static int ExecuteSqlTran ( List SQLStringList ) |
{ |
using ( SqlConnection conn = new SqlConnection ( connectionString ) ) |
{ |
conn.Open(); |
SqlCommand cmd = new SqlCommand(); |
cmd.Connection = conn; |
SqlTransaction tx = conn.BeginTransaction(); |
cmd.Transaction = tx; |
try |
{ |
int count = 0; |
for ( int n = 0; n < SQLStringList.Count; n++ ) |
{ |
string strsql = SQLStringList[n]; |
if ( strsql.Trim().Length > 1 ) |
{ |
cmd.CommandText = strsql; |
count += cmd.ExecuteNonQuery(); |
} |
} |
tx.Commit(); |
return count; |
} |
catch |
{ |
tx.Rollback(); |
return -1; |
} |
finally |
{ |
if ( conn.State == ConnectionState.Open ) |
{ |
conn.Close(); |
} |
} |
} |
} |
by: 发表于:2017-11-14 10:32:07 顶(0) | 踩(0) 回复
??
回复评论