private string CreateUpdateScript() { var connectionString = DatabaseNode.Databases.Server.ConnectionString; GetTableSchemaResult getTableSchemaResult; using (var connection = new SqlConnection(connectionString)) { connection.Open(); var tableName = $"{DatabaseNode.Name}.{_owner}.{_name}"; getTableSchemaResult = TableSchema.GetTableSchema(connection, tableName); } var textBuilder = new TextBuilder(); textBuilder.Add($"update {Name}"); textBuilder.Add("set"); using (textBuilder.Indent(1)) { var last = getTableSchemaResult.Columns.Count - 1; foreach (var item in getTableSchemaResult.Columns.SelectIndexed()) { var column = item.Value; var line = new StringBuilder(); line.Append($"{column.ColumnName} = @{column.ColumnName}"); if (item.Index < last) { line.Append(','); } textBuilder.Add(line.ToString()); } } if (getTableSchemaResult.UniqueIndexColumns.Count > 0) { textBuilder.Add("where"); using (textBuilder.Indent(1)) { var last = getTableSchemaResult.UniqueIndexColumns.Count - 1; foreach (var item in getTableSchemaResult.UniqueIndexColumns.SelectIndexed()) { var columnId = item.Value.ColumnId; var column = getTableSchemaResult.Columns.First(i => i.ColumnId == columnId); var line = new StringBuilder(); line.Append($"{column.ColumnName} = @{column.ColumnName}"); if (item.Index < last) { line.Append(','); } textBuilder.Add(line.ToString()); } } } var script = textBuilder.ToLines().ToIndentedString(" "); return(script); }
private void CsharpOrm_Click(object sender, EventArgs e) { var connectionString = DatabaseNode.Databases.Server.ConnectionString; GetTableSchemaResult getTableSchemaResult; using (var connection = new SqlConnection(connectionString)) { connection.Open(); var tableName = $"{DatabaseNode.Name}.{_owner}.{_name}"; getTableSchemaResult = TableSchema.GetTableSchema(connection, tableName); } var dataTransferObjectFields = getTableSchemaResult.Columns .Select(column => { var name = column.ColumnName; var typeName = column.TypeName; var isNullable = column.IsNullable; var csharpTypeName = SqlDataTypeArray.SqlDataTypes.First(i => i.SqlDataTypeName == typeName).CSharpTypeName; var csharpType = CSharpTypeArray.CSharpTypes.First(i => i.Name == csharpTypeName); if (isNullable == true && csharpType.Type.IsValueType) { csharpTypeName += "?"; } return(new DataTransferObjectField(name, csharpTypeName)); }) .ToReadOnlyCollection(); var dataTransferObject = DataTransferObjectFactory.CreateDataTransferObject(_name, dataTransferObjectFields).ToIndentedString(" "); var columns = getTableSchemaResult.Columns .Select(i => new Foundation.Data.DbQueryBuilding.Column(i.ColumnName, i.TypeName, i.IsNullable == true)) .ToReadOnlyCollection(); var createInsertSqlSqlStatementMethod = CreateInsertSqlStatementMethodFactory.Create(_owner, _name, columns); var identifierColumn = getTableSchemaResult.UniqueIndexColumns .Select(i => getTableSchemaResult.Columns.First(j => j.ColumnId == i.ColumnId)) .Select(i => new Foundation.Data.DbQueryBuilding.Column(i.ColumnName, i.TypeName, i.IsNullable == true)) .First(); var versionColumn = columns.FirstOrDefault(i => i.ColumnName == "Version"); columns = columns.Where(i => i.ColumnName != identifierColumn.ColumnName).ToReadOnlyCollection(); var createUpdateSqlStatementMethod = CreateUpdateSqlStatementMethodFactory.Create(_owner, _name, identifierColumn, versionColumn, columns); var createDeleteSqlStatementMethod = CreateDeleteSqlStatementMethodFactory.Create(_owner, _name, identifierColumn, versionColumn); var textBuilder = new TextBuilder(); textBuilder.Add(dataTransferObject); textBuilder.Add(Line.Empty); textBuilder.Add($"public static class {_name}SqlStatementFactory"); using (textBuilder.AddCSharpBlock()) { textBuilder.Add(createInsertSqlSqlStatementMethod); textBuilder.Add(Line.Empty); textBuilder.Add(createUpdateSqlStatementMethod); textBuilder.Add(Line.Empty); textBuilder.Add(createDeleteSqlStatementMethod); } Clipboard.SetText(textBuilder.ToLines().ToIndentedString(" ")); var queryForm = (QueryForm)DataCommanderApplication.Instance.MainForm.ActiveMdiChild; queryForm.SetStatusbarPanelText("Copying script to clipboard finished.", queryForm.ColorTheme != null ? queryForm.ColorTheme.ForeColor : SystemColors.ControlText); }
GetTableSchemaResult IProvider.GetTableSchema(IDbConnection connection, string?tableName) => TableSchema.GetTableSchema(connection, tableName);