Пример #1
0
 public static void ClearAndMerge(this DataTable table, DataTable newtable)
 {
     table.BeginLoadData();
     table.Clear();
     table.Merge(newtable, false, MissingSchemaAction.Ignore);
     table.EndLoadData();
 }
        public static void FillPrimaryKeysBySchema(this SchemaDataSet.SchemaPrimaryKeysDataTable primaryKeysDataTable, string schema, IDbConnection connection)
        {
            if (connection == null)
            {
                throw new ArgumentNullException("connection");
            }

            const string SELECT_PRIMARY_KEYS = @"
SELECT        cons.TABLE_SCHEMA
            , cons.TABLE_NAME
            , cols.COLUMN_NAME
            , 0 AS IsMatch
    FROM            INFORMATION_SCHEMA.TABLE_CONSTRAINTS AS cons 
    LEFT OUTER JOIN INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE AS cols 
                ON  cons.CONSTRAINT_NAME = cols.CONSTRAINT_NAME
    WHERE   (cons.CONSTRAINT_TYPE = 'PRIMARY KEY') 
        AND (cons.TABLE_SCHEMA = @tableSchema)
    ORDER BY  cons.TABLE_SCHEMA
            , cons.TABLE_NAME
            , cols.COLUMN_NAME";

            primaryKeysDataTable.Clear();
            using (IDbCommand command = connection.CreateCommand())
            {
                command.CommandText = SELECT_PRIMARY_KEYS;

                IDbDataParameter parameter = command.CreateParameter();
                command.Parameters.Add(parameter);

                parameter.DbType = DbType.String;
                parameter.Direction = ParameterDirection.Input;
                parameter.ParameterName = "@tableSchema";
                parameter.Value = schema;

                ConnectionState state = connection.State;
                bool startedClosed = state == ConnectionState.Closed;
                try
                {
                    using (IDataReader reader = command.ExecuteReader())
                    {
                        primaryKeysDataTable.BeginLoadData();
                        primaryKeysDataTable.Load(reader);
                        primaryKeysDataTable.EndLoadData();
                    }
                }
                finally
                {
                    if (startedClosed)
                    {
                        if (connection.State
                            != ConnectionState.Closed)
                        {
                            connection.Close();
                        }
                    }
                }
            }
        }