Commit 2696ee42 authored by tr's avatar tr

1、模块管理:生成SQL优化

parent c980316b
...@@ -134,55 +134,67 @@ namespace Tools.UI ...@@ -134,55 +134,67 @@ namespace Tools.UI
{ {
//模块表 //模块表
DataRow drMaster = this.GetCurrentNodeRow(); DataRow drMaster = this.GetCurrentNodeRow();
var colist = this.GetTableColumns(this._dtModel); var model = this.GenInsertSQL(drMaster);
var model = $@"
INSERT INTO {this._dtModel.TableName}
{this.GenColumns(colist)}
VALUES
{this.GenValues(drMaster, colist)}
";
//功能表 //功能表
var funcColist = this.GetTableColumns(this._dtDetail); var rows = this._dtDetail.DefaultView.Cast<DataRowView>().Select(r => r.Row);
var values = this._dtDetail.DefaultView.Cast<DataRowView>().Select(r => this.GenValues(r.Row, funcColist)); var detail = this.GenInsertSQL(rows.ToArray());
var detail = $@"
INSERT INTO {this._dtDetail.TableName}
{this.GenColumns(funcColist)}
VALUES
{string.Join(",\r\n", values)}
";
//生成结果 //生成结果
var result = $@" 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";
IF NOT EXISTS (SELECT 1 FROM SysBusinessModel WHERE Name = '{this.tbName.Text}') //显示结果
BEGIN
{model}
DECLARE @ModelID INT
SET @ModelID=SCOPE_IDENTITY();
{detail}
END";
Utils.Tip(result, 800, 600); Utils.Tip(result, 800, 600);
} }
/// <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) private string GenColumns(List<string> colist)
{ {
return $"({string.Join(", ", 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) private string GenValues(DataRow dr, List<string> colist)
{ {
var valist = colist.Select(col => col.ToLower().Equals("modelid") ? "@ModelID" : $"'{dr[col].ToString()}'"); var valist = colist.Select(col => col.ToLower().Equals("modelid") ? "@ModelID" : $"'{dr[col].ToString()}'");
return $"({string.Join(", ", valist)})"; return $"({string.Join(", ", valist)})";
} }
/// <summary>
/// 获取有效列(非自增列)
/// </summary>
/// <param name="dt"></param>
/// <returns></returns>
private List<string> GetTableColumns(DataTable dt) private List<string> GetTableColumns(DataTable dt)
{ {
var result = new List<string>(); var result = new List<string>();
dt.Columns.Cast<DataColumn>().ToList().ForEach(c => dt.Columns.Cast<DataColumn>().ToList()
{ .ForEach(c => {
if (!c.AutoIncrement) if (!c.AutoIncrement)
{ {
result.Add(c.ColumnName); result.Add(c.ColumnName);
} }
}); });
return result; return result;
} }
......
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