Commit 2696ee42 authored by tr's avatar tr

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

parent c980316b
......@@ -134,55 +134,67 @@ namespace Tools.UI
{
//模块表
DataRow drMaster = this.GetCurrentNodeRow();
var colist = this.GetTableColumns(this._dtModel);
var model = $@"
INSERT INTO {this._dtModel.TableName}
{this.GenColumns(colist)}
VALUES
{this.GenValues(drMaster, colist)}
";
var model = this.GenInsertSQL(drMaster);
//功能表
var funcColist = this.GetTableColumns(this._dtDetail);
var values = this._dtDetail.DefaultView.Cast<DataRowView>().Select(r => this.GenValues(r.Row, funcColist));
var detail = $@"
INSERT INTO {this._dtDetail.TableName}
{this.GenColumns(funcColist)}
VALUES
{string.Join(",\r\n", values)}
";
var rows = this._dtDetail.DefaultView.Cast<DataRowView>().Select(r => r.Row);
var detail = this.GenInsertSQL(rows.ToArray());
//生成结果
var result = $@"
IF NOT EXISTS (SELECT 1 FROM SysBusinessModel WHERE Name = '{this.tbName.Text}')
BEGIN
{model}
DECLARE @ModelID INT
SET @ModelID=SCOPE_IDENTITY();
{detail}
END";
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";
//显示结果
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)
{
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)
{
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);
}
});
dt.Columns.Cast<DataColumn>().ToList()
.ForEach(c => {
if (!c.AutoIncrement)
{
result.Add(c.ColumnName);
}
});
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