コード例 #1
0
    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);
    }
コード例 #2
0
ファイル: TableNode.cs プロジェクト: windygu/DataCommander
        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);
        }
コード例 #3
0
 GetTableSchemaResult IProvider.GetTableSchema(IDbConnection connection, string?tableName) => TableSchema.GetTableSchema(connection, tableName);