Commit c76caf61 authored by tr's avatar tr

1、代码优化:将Insert语句生成,提升为工具类方法

parent 43222620
...@@ -382,10 +382,25 @@ namespace Tools.MyUtils ...@@ -382,10 +382,25 @@ namespace Tools.MyUtils
#endregion #endregion
#region 生成SQL #region 生成SQL
#region 生成创建表的语句
/// <summary>
/// 生成SQL头部
/// </summary>
/// <param name="tableName"></param>
/// <returns></returns>
public static string GenSqlHead(string tableName) public static string GenSqlHead(string tableName)
{ {
return $"IF NOT EXISTS(SELECT 1 FROM sys.tables WHERE name = '{tableName}')\r\nBEGIN\r\nCREATE TABLE {tableName}\r\n("; return $"IF NOT EXISTS(SELECT 1 FROM sys.tables WHERE name = '{tableName}')\r\nBEGIN\r\nCREATE TABLE {tableName}\r\n(";
} }
/// <summary>
/// 生成SQL主体
/// </summary>
/// <param name="dt"></param>
/// <param name="tableName"></param>
/// <param name="tableDescription"></param>
/// <param name="descriptionList">Out:列描述信息通过存储过程创建,此处生成语句并以输出参数形式返回</param>
/// <returns></returns>
public static string GenSqlBody(DataTable dt, string tableName, string tableDescription, out List<string> descriptionList) public static string GenSqlBody(DataTable dt, string tableName, string tableDescription, out List<string> descriptionList)
{ {
//描述信息 //描述信息
...@@ -420,11 +435,75 @@ namespace Tools.MyUtils ...@@ -420,11 +435,75 @@ namespace Tools.MyUtils
return string.Join(",\r\n", columnInfoList); return string.Join(",\r\n", columnInfoList);
} }
/// <summary>
/// 生成SQL尾部
/// </summary>
/// <returns></returns>
public static string GenSqlTail() public static string GenSqlTail()
{ {
return $");\r\nEND;"; return $");\r\nEND;";
} }
#endregion
#region 生成Insert语句
/// <summary>
/// 生成表格Insert语句
/// </summary>
/// <param name="rows"></param>
/// <returns></returns>
public static string GenInsertSQL(params DataRow[] rows)
{
if (rows == null || rows.Length == 0)
return "";
//
var dt = rows[0].Table;
var colist = Utils.GetTableColumns(dt);
var values = rows.Select(r => Utils.GenValues(r, colist));
var result = $"INSERT INTO {dt.TableName}\r\n\t{Utils.GenColumns(colist)}\r\nVALUES\r\n\t{string.Join(",\r\n\t", values)}";
return result;
}
/// <summary>
/// 生成列集合
/// </summary>
/// <param name="colist"></param>
/// <returns></returns>
private static string GenColumns(List<string> colist)
{
return $"([{string.Join("], [", colist)}])";
}
/// <summary>
/// 生成值集合(此处将所有值转为字符串处理,后续可细化按类型转换)
/// </summary>
/// <param name="dr"></param>
/// <param name="colist"></param>
/// <returns></returns>
private static string GenValues(DataRow dr, List<string> colist)
{
var valist = colist.Select(col => col.ToLower().Equals("modelid") ? "@ModelID" : $"'{dr[col].ToString()}'");
return $"({string.Join(", ", valist)})";
}
/// <summary>
/// 获取有效列(只取非自增列)
/// </summary>
/// <param name="dt"></param>
/// <returns></returns>
private static List<string> GetTableColumns(DataTable dt)
{
var result = new List<string>();
dt.Columns.Cast<DataColumn>().ToList()
.ForEach(c => {
if (!c.AutoIncrement)
{
result.Add(c.ColumnName);
}
});
return result;
}
#endregion
#endregion #endregion
#region 汉字拼音缩写 #region 汉字拼音缩写
......
...@@ -132,10 +132,10 @@ namespace Tools.UI ...@@ -132,10 +132,10 @@ namespace Tools.UI
{ {
//模块表 //模块表
DataRow drMaster = this.GetCurrentNodeRow(); DataRow drMaster = this.GetCurrentNodeRow();
var model = this.GenInsertSQL(drMaster); var model = Utils.GenInsertSQL(drMaster);
//功能表 //功能表
var rows = this._dtDetail.DefaultView.Cast<DataRowView>().Select(r => r.Row); var rows = this._dtDetail.DefaultView.Cast<DataRowView>().Select(r => r.Row);
var detail = this.GenInsertSQL(rows.ToArray()); var detail = Utils.GenInsertSQL(rows.ToArray());
//生成结果 //生成结果
var result = $"IF NOT EXISTS(SELECT 1 FROM SysBusinessModel WHERE Name = '{this.tbName.Text}')\r\nBEGIN\r\n{model}\r\nDECLARE @ModelID INT;\r\nSET @ModelID=SCOPE_IDENTITY();\r\n{detail}\r\nEND"; var result = $"IF NOT EXISTS(SELECT 1 FROM SysBusinessModel WHERE Name = '{this.tbName.Text}')\r\nBEGIN\r\n{model}\r\nDECLARE @ModelID INT;\r\nSET @ModelID=SCOPE_IDENTITY();\r\n{detail}\r\nEND";
//显示结果 //显示结果
...@@ -169,7 +169,7 @@ namespace Tools.UI ...@@ -169,7 +169,7 @@ namespace Tools.UI
} }
#endregion #endregion
#region 树结构处理 #region 树结构处理:此处处理具有通用性,可为后续树控件提取做参考
/// <summary> /// <summary>
/// 树形图-初始化 /// 树形图-初始化
...@@ -389,63 +389,6 @@ namespace Tools.UI ...@@ -389,63 +389,6 @@ namespace Tools.UI
} }
} }
#endregion
#region SQL生成相关
/// <summary>
/// 生成表格Insert语句
/// </summary>
/// <param name="rows"></param>
/// <returns></returns>
private string GenInsertSQL(params DataRow[] rows)
{
if (rows == null || rows.Length == 0)
return "";
//
var dt = rows[0].Table;
var colist = this.GetTableColumns(dt);
var values = rows.Select(r => this.GenValues(r, colist));
var result = $"INSERT INTO {dt.TableName}\r\n\t{this.GenColumns(colist)}\r\nVALUES\r\n\t{string.Join(",\r\n\t", values)}";
return result;
}
/// <summary>
/// 生成列集合
/// </summary>
/// <param name="colist"></param>
/// <returns></returns>
private string GenColumns(List<string> colist)
{
return $"([{string.Join("], [", colist)}])";
}
/// <summary>
/// 生成值集合
/// </summary>
/// <param name="dr"></param>
/// <param name="colist"></param>
/// <returns></returns>
private string GenValues(DataRow dr, List<string> colist)
{
var valist = colist.Select(col => col.ToLower().Equals("modelid") ? "@ModelID" : $"'{dr[col].ToString()}'");
return $"({string.Join(", ", valist)})";
}
/// <summary>
/// 获取有效列(非自增列)
/// </summary>
/// <param name="dt"></param>
/// <returns></returns>
private List<string> GetTableColumns(DataTable dt)
{
var result = new List<string>();
dt.Columns.Cast<DataColumn>().ToList()
.ForEach(c => {
if (!c.AutoIncrement)
{
result.Add(c.ColumnName);
}
});
return result;
}
#endregion #endregion
#region 便捷操作:字符串ID-自动生成 #region 便捷操作:字符串ID-自动生成
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment