示例#1
0
 public override void BuildColumnRenameSql(DbObjectChange change, DbColumnInfo oldColumn, DbColumnInfo newColumn)
 {
     change.AddScript(DbScriptType.ColumnRename,
                      $"ALTER TABLE {newColumn.Table.FullName} RENAME COLUMN {oldColumn.ColumnNameQuoted} TO {newColumn.ColumnNameQuoted};");
 }
        OdbcType GetSqlDbType(DbColumnInfo column)
        {
            var dbtype  = column.DbTypeText;
            var isarray = dbtype.EndsWith("[]");

            if (isarray)
            {
                dbtype = dbtype.Remove(dbtype.Length - 2);
            }
            var ret = OdbcType.VarChar;

            switch (dbtype.ToLower().TrimStart('_'))
            {
            case "tinyint": ret = OdbcType.TinyInt; break;

            case "int2": ret = OdbcType.SmallInt; break;

            case "int4": ret = OdbcType.Int; break;

            case "int8": ret = OdbcType.BigInt; break;

            case "numeric": ret = OdbcType.Numeric; break;

            case "float4": ret = OdbcType.Real; break;

            case "float8": ret = OdbcType.Double; break;

            case "money": ret = OdbcType.Numeric; break;

            case "char": ret = column.MaxLength == 36 ? OdbcType.UniqueIdentifier : OdbcType.Char; break;

            case "bpchar": ret = OdbcType.Char; break;

            case "varchar": ret = OdbcType.VarChar; break;

            case "text": ret = OdbcType.Text; break;

            case "timestamp": ret = OdbcType.Timestamp; break;

            case "timestamptz": ret = OdbcType.Timestamp; break;

            case "date": ret = OdbcType.Date; break;

            case "time": ret = OdbcType.Time; break;

            case "timetz": ret = OdbcType.Time; break;

            case "interval": ret = OdbcType.Time; break;

            case "bool": ret = OdbcType.Bit; break;

            case "blob": ret = OdbcType.VarBinary; break;

            case "bytea": ret = OdbcType.VarBinary; break;

            case "bit": ret = OdbcType.Bit; break;

            case "varbit": ret = OdbcType.VarBinary; break;

            case "uuid": ret = OdbcType.UniqueIdentifier; break;
            }
            return(ret);
        }
示例#3
0
 public string GetCsType(DbColumnInfo column) => _dicDbToCs.TryGetValue(column.DbTypeTextFull, out var trydc) ? (column.IsNullable ? trydc.csType : trydc.csType.Replace("?", "")) : null;
 public string GetCsConvert(DbColumnInfo column) => _dicDbToCs.TryGetValue(column.DbType, out var trydc) ? (column.IsNullable ? trydc.csConvert : trydc.csConvert.Replace("?", "")) : null;
 public string GetDataReaderMethod(DbColumnInfo column) => _dicDbToCs.TryGetValue(column.DbType, out var trydc) ? trydc.dataReaderMethod : null;
示例#6
0
        OdbcType GetSqlDbType(DbColumnInfo column)
        {
            switch (column.DbTypeText.ToLower())
            {
            case "bit": return(OdbcType.Bit);

            case "tinyint": return(OdbcType.TinyInt);

            case "smallint": return(OdbcType.SmallInt);

            case "int": return(OdbcType.Int);

            case "bigint": return(OdbcType.BigInt);

            case "numeric":
            case "decimal": return(OdbcType.Decimal);

            case "smallmoney": return(OdbcType.Decimal);

            case "money": return(OdbcType.Decimal);

            case "float": return(OdbcType.Double);

            case "real": return(OdbcType.Real);

            case "date": return(OdbcType.Date);

            case "datetime":
            case "datetime2": return(OdbcType.DateTime);

            case "datetimeoffset": return(OdbcType.DateTime);

            case "smalldatetime": return(OdbcType.SmallDateTime);

            case "time": return(OdbcType.Time);

            case "char": return(OdbcType.Char);

            case "varchar": return(OdbcType.VarChar);

            case "text": return(OdbcType.Text);

            case "nchar": return(OdbcType.NChar);

            case "nvarchar": return(OdbcType.NVarChar);

            case "ntext": return(OdbcType.NText);

            case "binary": return(OdbcType.Binary);

            case "varbinary": return(OdbcType.VarBinary);

            case "image": return(OdbcType.Image);

            case "timestamp": return(OdbcType.Timestamp);

            case "uniqueidentifier": return(OdbcType.UniqueIdentifier);

            default: return(OdbcType.NVarChar);
            }
        }
示例#7
0
 public SqlColumnValuePlaceHolder(DbColumnInfo column, ParameterDirection direction = ParameterDirection.Input)
 {
     Column             = column;
     ParamDirection     = direction;
     base.FormatLiteral = column.TypeInfo.TypeDef.ToLiteral;
 }
 protected virtual void KeyAction(EntityColumnInfo item, DbColumnInfo dbColumn, out bool pkDiff, out bool idEntityDiff)
 {
     pkDiff       = item.IsPrimarykey != dbColumn.IsPrimarykey;
     idEntityDiff = item.IsIdentity != dbColumn.IsIdentity;
 }
示例#9
0
        OracleDbType GetSqlDbType(DbColumnInfo column)
        {
            var dbfull = column.DbTypeTextFull.ToLower();

            switch (dbfull)
            {
            case "number(1)": return(OracleDbType.Boolean);

            case "number(4)": return(OracleDbType.Decimal);

            case "number(6)": return(OracleDbType.Int16);

            case "number(11)": return(OracleDbType.Int32);

            case "number(21)": return(OracleDbType.Int64);

            case "number(3)": return(OracleDbType.Byte);

            case "number(5)": return(OracleDbType.Decimal);

            case "number(10)": return(OracleDbType.Decimal);

            case "number(20)": return(OracleDbType.Decimal);

            case "float(126)": return(OracleDbType.Double);

            case "float(63)": return(OracleDbType.Single);

            case "number(10,2)": return(OracleDbType.Decimal);

            case "interval day(2) to second(6)": return(OracleDbType.IntervalDS);

            case "timestamp(6)": return(OracleDbType.TimeStamp);

            case "timestamp(6) with local time zone": return(OracleDbType.TimeStampLTZ);

            case "blob": return(OracleDbType.Blob);

            case "nvarchar2(255)": return(OracleDbType.NVarchar2);

            case "char(36 char)": return(OracleDbType.Char);
            }
            switch (column.DbTypeText.ToLower())
            {
            case "number":
                _dicDbToCs.TryAdd(dbfull, _dicDbToCs["number(10,2)"]);
                return(OracleDbType.Decimal);

            case "float":
                _dicDbToCs.TryAdd(dbfull, _dicDbToCs["float(126)"]);
                return(OracleDbType.Double);

            case "interval day to second":
                _dicDbToCs.TryAdd(dbfull, _dicDbToCs["interval day(2) to second(6)"]);
                return(OracleDbType.IntervalDS);

            case "date":
                _dicDbToCs.TryAdd(dbfull, _dicDbToCs["date(7)"]);
                return(OracleDbType.IntervalDS);

            case "timestamp":
                _dicDbToCs.TryAdd(dbfull, _dicDbToCs["timestamp(6)"]);
                return(OracleDbType.TimeStamp);

            case "timestamp with local time zone":
                _dicDbToCs.TryAdd(dbfull, _dicDbToCs["timestamp(6) with local time zone"]);
                return(OracleDbType.TimeStampLTZ);

            case "blob":
                _dicDbToCs.TryAdd(dbfull, _dicDbToCs["blob"]);
                return(OracleDbType.Blob);

            case "nvarchar2":
                _dicDbToCs.TryAdd(dbfull, _dicDbToCs["nvarchar2(255)"]);
                return(OracleDbType.NVarchar2);

            case "varchar2":
                _dicDbToCs.TryAdd(dbfull, _dicDbToCs["nvarchar2(255)"]);
                return(OracleDbType.Varchar2);

            case "char":
                _dicDbToCs.TryAdd(dbfull, _dicDbToCs["nvarchar2(255)"]);
                return(OracleDbType.Char);

            case "nchar":
                _dicDbToCs.TryAdd(dbfull, _dicDbToCs["nvarchar2(255)"]);
                return(OracleDbType.NChar);

            case "clob":
                _dicDbToCs.TryAdd(dbfull, _dicDbToCs["nvarchar2(255)"]);
                return(OracleDbType.Clob);

            case "nclob":
                _dicDbToCs.TryAdd(dbfull, _dicDbToCs["nvarchar2(255)"]);
                return(OracleDbType.NClob);

            case "raw":
                _dicDbToCs.TryAdd(dbfull, _dicDbToCs["blob"]);
                return(OracleDbType.Raw);

            case "long raw":
                _dicDbToCs.TryAdd(dbfull, _dicDbToCs["blob"]);
                return(OracleDbType.LongRaw);

            case "binary_float":
                _dicDbToCs.TryAdd(dbfull, _dicDbToCs["float(63)"]);
                return(OracleDbType.BinaryFloat);

            case "binary_double":
                _dicDbToCs.TryAdd(dbfull, _dicDbToCs["float(126)"]);
                return(OracleDbType.BinaryDouble);

            case "rowid":
            default:
                _dicDbToCs.TryAdd(dbfull, _dicDbToCs["nvarchar2(255)"]);
                return(OracleDbType.NVarchar2);
            }
            throw new NotImplementedException($"未实现 {column.DbTypeTextFull} 类型映射");
        }
示例#10
0
 public override void BuildColumnRenameSql(DbObjectChange change, DbColumnInfo oldColumn, DbColumnInfo newColumn)
 {
     change.AddScript(DbScriptType.ColumnRename, "EXEC SYS.SP_RENAME '{0}.{1}.{2}' , '{3}', 'COLUMN'",
                      oldColumn.Table.Schema, oldColumn.Table.TableName, oldColumn.ColumnName, newColumn.ColumnName);
 }
示例#11
0
 public int GetDbType(DbColumnInfo column) => (int)GetOscarDbType(column);
示例#12
0
 public override void BuildColumnRenameSql(DbObjectChange change, DbColumnInfo oldColumn, DbColumnInfo newColumn)
 {
     change.AddScript(DbScriptType.ColumnRename, "ALTER TABLE {0} RENAME COLUMN \"{1}\" TO \"{2}\";", newColumn.Table.FullName, oldColumn.ColumnName, newColumn.ColumnName);
 }
示例#13
0
        private void btnTestConn_Click(object sender, EventArgs e)
        {
            if (!string.IsNullOrEmpty(txtConnStrGen.Text))
            {
                try
                {
                    if (skinLVConns.SelectedItems.Count > 0)
                    {
                        labelConnStatus.Text = "";
                        var             a            = skinLVConns.SelectedItems[0];
                        string          testConnStr  = txtConnStrGen.Text;
                        string          DataBaseType = a.SubItems[5].Text;
                        SqlSugar.DbType sdt          = SqlSugar.DbType.SqlServer;
                        switch (DataBaseType)
                        {
                        case "MSSql":
                            sdt = SqlSugar.DbType.SqlServer;
                            break;

                        case "Cache*":

                            break;

                        case "Oracle*":
                            sdt = SqlSugar.DbType.Oracle;
                            break;

                        default:
                            break;
                        }
                        using (SqlSugarClient ssc = SqlSugarUtils.GetDb(testConnStr, sdt))
                        {
                            List <DbColumnInfo> columns = new List <DbColumnInfo>();
                            DbColumnInfo        column  = new DbColumnInfo();
                            column.DataType     = "varchar";
                            column.DbColumnName = "testcol";
                            column.Length       = 50;
                            columns.Add(column);
                            bool result = ssc.DbMaintenance.CreateTable("HydTestDbTable", columns);
                            if (result)
                            {
                                ssc.DbMaintenance.DropTable("HydTestDbTable");
                                labelConnStatus.Text = "测试成功!";
                            }
                            else
                            {
                                labelConnStatus.Text = "连接失败!";
                            }
                        }
                    }
                }
                catch (Exception ex)
                {
                    labelConnStatus.Text = "连接失败! " + ex.Message;
                }
            }
            else
            {
                MessageBox.Show("请先 生成连接字符串");
            }
        }
示例#14
0
        DbType GetSqlDbType(DbColumnInfo column)
        {
            var dbfull = column.DbTypeTextFull.ToLower();

            switch (dbfull)
            {
            case "boolean": return(DbType.Boolean);

            case "smallint": return(DbType.Int16);

            case "integer": return(DbType.Int32);

            case "bigint": return(DbType.Int64);

            case "int2": return(DbType.Byte);

            case "unsigned": return(DbType.Decimal);

            case "decimal(10,0)": return(DbType.Decimal);

            case "decimal(21,0)": return(DbType.Decimal);

            case "double": return(DbType.Double);

            case "float": return(DbType.Single);

            case "decimal(10,2)": return(DbType.Decimal);

            case "datetime": return(DbType.DateTime);

            case "blob": return(DbType.Binary);

            case "nvarchar(255)": return(DbType.String);

            case "character(36)": return(DbType.AnsiString);
            }
            switch (column.DbTypeText.ToLower())
            {
            case "int":
                _dicDbToCs.TryAdd(dbfull, _dicDbToCs["integer"]);
                return(DbType.Int32);

            case "tinyint":
                _dicDbToCs.TryAdd(dbfull, _dicDbToCs["int2"]);
                return(DbType.Byte);

            case "mediumint":
                _dicDbToCs.TryAdd(dbfull, _dicDbToCs["bigint"]);
                return(DbType.Int64);

            case "unsigned big int":
            case "int8":
                _dicDbToCs.TryAdd(dbfull, _dicDbToCs["bigint"]);
                return(DbType.Int64);

            case "numeric":
            case "decimal":
                _dicDbToCs.TryAdd(dbfull, _dicDbToCs["decimal(10,2)"]);
                return(DbType.Decimal);

            case "date":
            case "smalldatetime":
                _dicDbToCs.TryAdd(dbfull, _dicDbToCs["datetime"]);
                return(DbType.Date);

            case "real":
                _dicDbToCs.TryAdd(dbfull, _dicDbToCs["float"]);
                return(DbType.Double);

            case "double precision":
                _dicDbToCs.TryAdd(dbfull, _dicDbToCs["double"]);
                return(DbType.Double);

            case "blob":
                _dicDbToCs.TryAdd(dbfull, _dicDbToCs["blob"]);
                return(DbType.Binary);

            case "character":
            case "varchar":
            case "varying character":
            case "nchar":
            case "native character":
            case "nvarchar":
            case "text":
            case "clob":
                _dicDbToCs.TryAdd(dbfull, _dicDbToCs["nvarchar(255)"]);
                return(DbType.String);

            default:
                _dicDbToCs.TryAdd(dbfull, _dicDbToCs["nvarchar(255)"]);
                return(DbType.String);
            }
            throw new NotImplementedException($"未实现 {column.DbTypeTextFull} 类型映射");
        }
示例#15
0
        OdbcType GetOdbcType(DbColumnInfo column)
        {
            var is_unsigned = column.DbTypeTextFull.ToLower().EndsWith(" unsigned");

            switch (column.DbTypeText.ToLower())
            {
            case "bit": return(OdbcType.Bit);

            case "tinyint": return(is_unsigned ? OdbcType.TinyInt : OdbcType.SmallInt);

            case "smallint": return(is_unsigned ? OdbcType.Int : OdbcType.SmallInt);

            case "mediumint": return(is_unsigned ? OdbcType.Int : OdbcType.Int);

            case "int": return(is_unsigned ? OdbcType.BigInt : OdbcType.Int);

            case "bigint": return(is_unsigned ? OdbcType.Decimal : OdbcType.BigInt);

            case "real":
            case "double": return(OdbcType.Double);

            case "float": return(OdbcType.Real);

            case "numeric":
            case "decimal": return(OdbcType.Decimal);

            case "year": return(OdbcType.Int);

            case "time": return(OdbcType.Time);

            case "date": return(OdbcType.Date);

            case "timestamp": return(OdbcType.Timestamp);

            case "datetime": return(OdbcType.DateTime);

            case "tinyblob": return(OdbcType.VarBinary);

            case "blob": return(OdbcType.VarBinary);

            case "mediumblob": return(OdbcType.VarBinary);

            case "longblob": return(OdbcType.VarBinary);

            case "binary": return(OdbcType.Binary);

            case "varbinary": return(OdbcType.VarBinary);

            case "tinytext": return(OdbcType.Text);

            case "text": return(OdbcType.Text);

            case "mediumtext": return(OdbcType.Text);

            case "longtext": return(OdbcType.Text);

            case "char": return(column.MaxLength == 36 ? OdbcType.Char : OdbcType.VarChar);

            case "varchar": return(OdbcType.VarChar);

            case "set": return(OdbcType.VarChar);

            case "enum": return(OdbcType.VarChar);

            default: return(OdbcType.VarChar);
            }
        }
示例#16
0
 protected virtual void ProcessColumn(DbColumnInfo info)
 {
 }
示例#17
0
        MySqlDbType GetMySqlDbType(DbColumnInfo column)
        {
            var is_unsigned = column.DbTypeTextFull?.ToLower().EndsWith(" unsigned") == true;

            switch (column.DbTypeText?.ToLower())
            {
            case "bit": return(MySqlDbType.Bit);

            case "tinyint": return(is_unsigned ? MySqlDbType.UByte : MySqlDbType.Byte);

            case "smallint": return(is_unsigned ? MySqlDbType.UInt16 : MySqlDbType.Int16);

            case "mediumint": return(is_unsigned ? MySqlDbType.UInt24 : MySqlDbType.Int24);

            case "int": return(is_unsigned ? MySqlDbType.UInt32 : MySqlDbType.Int32);

            case "bigint": return(is_unsigned ? MySqlDbType.UInt64 : MySqlDbType.Int64);

            case "real":
            case "double": return(MySqlDbType.Double);

            case "float": return(MySqlDbType.Float);

            case "numeric":
            case "decimal": return(MySqlDbType.Decimal);

            case "year": return(MySqlDbType.Year);

            case "time": return(MySqlDbType.Time);

            case "date": return(MySqlDbType.Date);

            case "timestamp": return(MySqlDbType.Timestamp);

            case "datetime": return(MySqlDbType.DateTime);

            case "tinyblob": return(MySqlDbType.TinyBlob);

            case "blob": return(MySqlDbType.Blob);

            case "mediumblob": return(MySqlDbType.MediumBlob);

            case "longblob": return(MySqlDbType.LongBlob);

            case "binary": return(MySqlDbType.Binary);

            case "varbinary": return(MySqlDbType.VarBinary);

            case "tinytext": return(MySqlDbType.TinyText);

            case "text": return(MySqlDbType.Text);

            case "mediumtext": return(MySqlDbType.MediumText);

            case "longtext": return(MySqlDbType.LongText);

            case "char": return(column.MaxLength == 36 ? MySqlDbType.Guid : MySqlDbType.String);

            case "varchar": return(MySqlDbType.VarChar);

            case "set": return(MySqlDbType.Set);

            case "enum": return(MySqlDbType.Enum);

            case "point": return(MySqlDbType.Geometry);

            case "linestring": return(MySqlDbType.Geometry);

            case "polygon": return(MySqlDbType.Geometry);

            case "geometry": return(MySqlDbType.Geometry);

            case "multipoint": return(MySqlDbType.Geometry);

            case "multilinestring": return(MySqlDbType.Geometry);

            case "multipolygon": return(MySqlDbType.Geometry);

            case "geometrycollection": return(MySqlDbType.Geometry);

            default: return(MySqlDbType.String);
            }
        }
示例#18
0
 protected override void BuildKeyColomn(DbColumnInfo info)
 {
     Result.Append(info.IsAutoIncrement ? "\t[DbKey]\r\n" : "\t[DbKey(IsDbGenerate = false)]\r\n");
     BuildColumn(info);
 }
示例#19
0
        NpgsqlDbType GetNpgsqlDbType(DbColumnInfo column)
        {
            var dbtype  = column.DbTypeText;
            var isarray = dbtype.EndsWith("[]");

            if (isarray)
            {
                dbtype = dbtype.Remove(dbtype.Length - 2);
            }
            NpgsqlDbType ret = NpgsqlDbType.Unknown;

            switch (dbtype.ToLower().TrimStart('_'))
            {
            case "int2": ret = NpgsqlDbType.Smallint; break;

            case "int4": ret = NpgsqlDbType.Integer; break;

            case "int8": ret = NpgsqlDbType.Bigint; break;

            case "numeric": ret = NpgsqlDbType.Numeric; break;

            case "float4": ret = NpgsqlDbType.Real; break;

            case "float8": ret = NpgsqlDbType.Double; break;

            case "money": ret = NpgsqlDbType.Money; break;

            case "bpchar": ret = NpgsqlDbType.Char; break;

            case "varchar": ret = NpgsqlDbType.Varchar; break;

            case "text": ret = NpgsqlDbType.Text; break;

            case "timestamp": ret = NpgsqlDbType.Timestamp; break;

            case "timestamptz": ret = NpgsqlDbType.TimestampTz; break;

            case "date": ret = NpgsqlDbType.Date; break;

            case "time": ret = NpgsqlDbType.Time; break;

            case "timetz": ret = NpgsqlDbType.TimeTz; break;

            case "interval": ret = NpgsqlDbType.Interval; break;

            case "bool": ret = NpgsqlDbType.Boolean; break;

            case "bytea": ret = NpgsqlDbType.Bytea; break;

            case "bit": ret = NpgsqlDbType.Bit; break;

            case "varbit": ret = NpgsqlDbType.Varbit; break;

            case "point": ret = NpgsqlDbType.Point; break;

            case "line": ret = NpgsqlDbType.Line; break;

            case "lseg": ret = NpgsqlDbType.LSeg; break;

            case "box": ret = NpgsqlDbType.Box; break;

            case "path": ret = NpgsqlDbType.Path; break;

            case "polygon": ret = NpgsqlDbType.Polygon; break;

            case "circle": ret = NpgsqlDbType.Circle; break;

            case "cidr": ret = NpgsqlDbType.Cidr; break;

            case "inet": ret = NpgsqlDbType.Inet; break;

            case "macaddr": ret = NpgsqlDbType.MacAddr; break;

            case "json": ret = NpgsqlDbType.Json; break;

            case "jsonb": ret = NpgsqlDbType.Jsonb; break;

            case "uuid": ret = NpgsqlDbType.Uuid; break;

            case "int4range": ret = NpgsqlDbType.Range | NpgsqlDbType.Integer; break;

            case "int8range": ret = NpgsqlDbType.Range | NpgsqlDbType.Bigint; break;

            case "numrange": ret = NpgsqlDbType.Range | NpgsqlDbType.Numeric; break;

            case "tsrange": ret = NpgsqlDbType.Range | NpgsqlDbType.Timestamp; break;

            case "tstzrange": ret = NpgsqlDbType.Range | NpgsqlDbType.TimestampTz; break;

            case "daterange": ret = NpgsqlDbType.Range | NpgsqlDbType.Date; break;

            case "hstore": ret = NpgsqlDbType.Hstore; break;

            case "geometry": ret = NpgsqlDbType.Geometry; break;
            }
            return(isarray ? (ret | NpgsqlDbType.Array) : ret);
        }
示例#20
0
 protected virtual void BuildKeyColomn(DbColumnInfo info)
 {
 }
示例#21
0
        OdbcType GetSqlDbType(DbColumnInfo column)
        {
            var dbfull = column.DbTypeTextFull.ToLower();

            switch (dbfull)
            {
            case "number(1)": return(OdbcType.Bit);

            case "number(4)": return(OdbcType.SmallInt);

            case "number(6)": return(OdbcType.SmallInt);

            case "number(11)": return(OdbcType.Int);

            case "number(21)": return(OdbcType.BigInt);

            case "number(3)": return(OdbcType.TinyInt);

            case "number(5)": return(OdbcType.SmallInt);

            case "number(10)": return(OdbcType.BigInt);

            case "number(20)": return(OdbcType.Decimal);

            case "float(126)": return(OdbcType.Double);

            case "float(63)": return(OdbcType.Real);

            case "number(10,2)": return(OdbcType.Decimal);

            case "interval day(2) to second(6)": return(OdbcType.Time);

            case "timestamp(6)": return(OdbcType.DateTime);

            case "timestamp(6) with local time zone": return(OdbcType.DateTime);

            case "blob": return(OdbcType.VarBinary);

            case "nvarchar2(255)": return(OdbcType.NVarChar);

            case "char(36 char)": return(OdbcType.Char);
            }
            switch (column.DbTypeText.ToLower())
            {
            case "number":
                _dicDbToCs.TryAdd(dbfull, _dicDbToCs["number(10,2)"]);
                return(OdbcType.Decimal);

            case "float":
                _dicDbToCs.TryAdd(dbfull, _dicDbToCs["float(126)"]);
                return(OdbcType.Double);

            case "interval day to second":
                _dicDbToCs.TryAdd(dbfull, _dicDbToCs["interval day(2) to second(6)"]);
                return(OdbcType.Time);

            case "date":
                _dicDbToCs.TryAdd(dbfull, _dicDbToCs["date(7)"]);
                return(OdbcType.DateTime);

            case "timestamp":
                _dicDbToCs.TryAdd(dbfull, _dicDbToCs["timestamp(6)"]);
                return(OdbcType.DateTime);

            case "timestamp with local time zone":
                _dicDbToCs.TryAdd(dbfull, _dicDbToCs["timestamp(6) with local time zone"]);
                return(OdbcType.DateTime);

            case "blob":
                _dicDbToCs.TryAdd(dbfull, _dicDbToCs["blob"]);
                return(OdbcType.VarBinary);

            case "nvarchar2":
                _dicDbToCs.TryAdd(dbfull, _dicDbToCs["nvarchar2(255)"]);
                return(OdbcType.NVarChar);

            case "varchar2":
                _dicDbToCs.TryAdd(dbfull, _dicDbToCs["nvarchar2(255)"]);
                return(OdbcType.NVarChar);

            case "char":
                _dicDbToCs.TryAdd(dbfull, _dicDbToCs["nvarchar2(255)"]);
                return(OdbcType.Char);

            case "nchar":
                _dicDbToCs.TryAdd(dbfull, _dicDbToCs["nvarchar2(255)"]);
                return(OdbcType.NChar);

            case "clob":
                _dicDbToCs.TryAdd(dbfull, _dicDbToCs["nvarchar2(255)"]);
                return(OdbcType.NVarChar);

            case "nclob":
                _dicDbToCs.TryAdd(dbfull, _dicDbToCs["nvarchar2(255)"]);
                return(OdbcType.NVarChar);

            case "raw":
                _dicDbToCs.TryAdd(dbfull, _dicDbToCs["blob"]);
                return(OdbcType.VarBinary);

            case "long raw":
                _dicDbToCs.TryAdd(dbfull, _dicDbToCs["blob"]);
                return(OdbcType.VarBinary);

            case "binary_float":
                _dicDbToCs.TryAdd(dbfull, _dicDbToCs["float(63)"]);
                return(OdbcType.Real);

            case "binary_double":
                _dicDbToCs.TryAdd(dbfull, _dicDbToCs["float(126)"]);
                return(OdbcType.Double);

            case "rowid":
            default:
                _dicDbToCs.TryAdd(dbfull, _dicDbToCs["nvarchar2(255)"]);
                return(OdbcType.NVarChar);
            }
            throw new NotImplementedException($"未实现 {column.DbTypeTextFull} 类型映射");
        }
示例#22
0
 public bool AddUsings(DbColumnInfo col, Dictionary <string, string> usings)
 {
     return(false);
 }
示例#23
0
 public string GetCsTypeValue(DbColumnInfo column) => _dicDbToCs.TryGetValue(column.DbType, out var trydc) ? trydc.csTypeValue : null;
示例#24
0
        public List <DbTableInfo> GetTablesByDatabase(params string[] database)
        {
            var olddatabase = "";

            using (var conn = _orm.Ado.MasterPool.Get(TimeSpan.FromSeconds(5)))
            {
                olddatabase = conn.Value.Database;
            }
            var dbs    = database == null || database.Any() == false ? new[] { olddatabase } : database;
            var tables = new List <DbTableInfo>();

            foreach (var db in dbs)
            {
                if (string.IsNullOrEmpty(db))
                {
                    continue;
                }

                var loc1 = new List <DbTableInfo>();
                var loc2 = new Dictionary <int, DbTableInfo>();
                var loc3 = new Dictionary <int, Dictionary <string, DbColumnInfo> >();

                var sql = $@"
use [{db}];
select 
 a.Object_id
,b.name 'Owner'
,a.name 'Name'
,(select value from sys.extended_properties where major_id = a.object_id AND minor_id = 0 AND name = 'MS_Description') 'Comment'
,'TABLE' type
from sys.tables a
inner join sys.schemas b on b.schema_id = a.schema_id
where not(b.name = 'dbo' and a.name = 'sysdiagrams')
union all
select
 a.Object_id
,b.name 'Owner'
,a.name 'Name'
,(select value from sys.extended_properties where major_id = a.object_id AND minor_id = 0 AND name = 'MS_Description') 'Comment'
,'VIEW' type
from sys.views a
inner join sys.schemas b on b.schema_id = a.schema_id
union all
select 
 a.Object_id
,b.name 'Owner'
,a.name 'Name'
,(select value from sys.extended_properties where major_id = a.object_id AND minor_id = 0 AND name = 'MS_Description') 'Comment'
,'StoreProcedure' type
from sys.procedures a
inner join sys.schemas b on b.schema_id = a.schema_id
where a.type = 'P' and charindex('diagram', a.name) = 0
order by type desc, b.name, a.name
;
use [{olddatabase}];
";
                var ds  = _orm.Ado.ExecuteArray(CommandType.Text, sql);
                if (ds == null)
                {
                    return(loc1);
                }

                var loc6       = new List <int[]>();
                var loc66      = new List <int[]>();
                var loc6_1000  = new List <int>();
                var loc66_1000 = new List <int>();
                foreach (object[] row in ds)
                {
                    int object_id = int.Parse(string.Concat(row[0]));
                    var owner     = string.Concat(row[1]);
                    var table     = string.Concat(row[2]);
                    var comment   = string.Concat(row[3]);
                    Enum.TryParse <DbTableType>(string.Concat(row[4]), out var type);
                    loc2.Add(object_id, new DbTableInfo {
                        Id = object_id.ToString(), Schema = owner, Name = table, Comment = comment, Type = type
                    });
                    loc3.Add(object_id, new Dictionary <string, DbColumnInfo>());
                    switch (type)
                    {
                    case DbTableType.VIEW:
                    case DbTableType.TABLE:
                        loc6_1000.Add(object_id);
                        if (loc6_1000.Count >= 500)
                        {
                            loc6.Add(loc6_1000.ToArray());
                            loc6_1000.Clear();
                        }
                        break;

                    case DbTableType.StoreProcedure:
                        loc66_1000.Add(object_id);
                        if (loc66_1000.Count >= 500)
                        {
                            loc66.Add(loc66_1000.ToArray());
                            loc66_1000.Clear();
                        }
                        break;
                    }
                }
                if (loc6_1000.Count > 0)
                {
                    loc6.Add(loc6_1000.ToArray());
                }
                if (loc66_1000.Count > 0)
                {
                    loc66.Add(loc66_1000.ToArray());
                }

                if (loc6.Count == 0)
                {
                    return(loc1);
                }
                Func <List <int[]>, StringBuilder> getloc8Sb = loclist =>
                {
                    if (loclist.Count == 0)
                    {
                        return(new StringBuilder());
                    }
                    var loc8sb = new StringBuilder().Append("(");
                    for (var loc8sbidx = 0; loc8sbidx < loclist.Count; loc8sbidx++)
                    {
                        if (loc8sbidx > 0)
                        {
                            loc8sb.Append(" OR ");
                        }
                        loc8sb.Append("a.table_name in (");
                        for (var loc8sbidx2 = 0; loc8sbidx2 < loclist[loc8sbidx].Length; loc8sbidx2++)
                        {
                            if (loc8sbidx2 > 0)
                            {
                                loc8sb.Append(",");
                            }
                            loc8sb.Append(loclist[loc8sbidx][loc8sbidx2]);
                        }
                        loc8sb.Append(")");
                    }
                    loc8sb.Append(")");
                    return(loc8sb);
                };
                var loc8  = getloc8Sb(loc6);
                var loc88 = getloc8Sb(loc66);

                var tsql_place = @"

select 
isnull(e.name,'') + '.' + isnull(d.name,'')
,a.Object_id
,a.name 'Column'
,b.name 'Type'
,case
 when b.name in ('Text', 'NText', 'Image') then -1
 when b.name in ('NChar', 'NVarchar') then a.max_length / 2
 else a.max_length end 'Length'
,b.name + case 
 when b.name in ('Char', 'VarChar', 'NChar', 'NVarChar', 'Binary', 'VarBinary') then '(' + 
  case when a.max_length = -1 then 'MAX' 
  when b.name in ('NChar', 'NVarchar') then cast(a.max_length / 2 as varchar)
  else cast(a.max_length as varchar) end + ')'
 when b.name in ('Numeric', 'Decimal') then '(' + cast(a.precision as varchar) + ',' + cast(a.scale as varchar) + ')'
 else '' end as 'SqlType'
,( select value from sys.extended_properties where major_id = a.object_id AND minor_id = a.column_id AND name = 'MS_Description') 'Comment'
{0} a
inner join sys.types b on b.user_type_id = a.user_type_id
left join sys.tables d on d.object_id = a.object_id
left join sys.schemas e on e.schema_id = d.schema_id
where {1}
";
                sql = string.Format(tsql_place, @"
,a.is_nullable 'IsNullable'
,a.is_identity 'IsIdentity'
from sys.columns", loc8.ToString().Replace("a.table_name", "a.object_id"));
                if (loc88.Length > 0)
                {
                    sql += "union all" +
                           string.Format(tsql_place.Replace(
                                             " select value from sys.extended_properties where major_id = a.object_id AND minor_id = a.column_id",
                                             " select value from sys.extended_properties where major_id = a.object_id AND minor_id = a.parameter_id"), @"
,cast(0 as bit) 'IsNullable'
,a.is_output 'IsIdentity'
from sys.parameters", loc88.ToString().Replace("a.table_name", "a.object_id"));
                }
                sql = $"use [{db}];{sql};use [{olddatabase}]; ";
                ds  = _orm.Ado.ExecuteArray(CommandType.Text, sql);
                if (ds == null)
                {
                    return(loc1);
                }

                foreach (object[] row in ds)
                {
                    var table_id    = string.Concat(row[0]);
                    var object_id   = int.Parse(string.Concat(row[1]));
                    var column      = string.Concat(row[2]);
                    var type        = string.Concat(row[3]);
                    var max_length  = int.Parse(string.Concat(row[4]));
                    var sqlType     = string.Concat(row[5]);
                    var comment     = string.Concat(row[6]);
                    var is_nullable = bool.Parse(string.Concat(row[7]));
                    var is_identity = bool.Parse(string.Concat(row[8]));
                    if (max_length == 0)
                    {
                        max_length = -1;
                    }

                    loc3[object_id].Add(column, new DbColumnInfo
                    {
                        Name           = column,
                        MaxLength      = max_length,
                        IsIdentity     = is_identity,
                        IsNullable     = is_nullable,
                        IsPrimary      = false,
                        DbTypeText     = type,
                        DbTypeTextFull = sqlType,
                        Table          = loc2[object_id],
                        Coment         = comment
                    });
                    loc3[object_id][column].DbType = this.GetDbType(loc3[object_id][column]);
                    loc3[object_id][column].CsType = this.GetCsTypeInfo(loc3[object_id][column]);
                }

                sql = $@"
use [{db}];
select 
 a.object_id 'Object_id'
,c.name 'Column'
,b.name 'Index_id'
,b.is_unique 'IsUnique'
,b.is_primary_key 'IsPrimaryKey'
,cast(case when b.type_desc = 'CLUSTERED' then 1 else 0 end as bit) 'IsClustered'
,case when a.is_descending_key = 1 then 1 else 0 end 'IsDesc'
from sys.index_columns a
inner join sys.indexes b on b.object_id = a.object_id and b.index_id = a.index_id
left join sys.columns c on c.object_id = a.object_id and c.column_id = a.column_id
where {loc8.ToString().Replace("a.table_name", "a.object_id")}
;
use [{olddatabase}];
";
                ds  = _orm.Ado.ExecuteArray(CommandType.Text, sql);
                if (ds == null)
                {
                    return(loc1);
                }

                var indexColumns  = new Dictionary <int, Dictionary <string, DbIndexInfo> >();
                var uniqueColumns = new Dictionary <int, Dictionary <string, DbIndexInfo> >();
                foreach (object[] row in ds)
                {
                    int    object_id      = int.Parse(string.Concat(row[0]));
                    string column         = string.Concat(row[1]);
                    string index_id       = string.Concat(row[2]);
                    bool   is_unique      = bool.Parse(string.Concat(row[3]));
                    bool   is_primary_key = bool.Parse(string.Concat(row[4]));
                    bool   is_clustered   = bool.Parse(string.Concat(row[5]));
                    bool   is_desc        = string.Concat(row[6]) == "1";

                    if (loc3.ContainsKey(object_id) == false || loc3[object_id].ContainsKey(column) == false)
                    {
                        continue;
                    }
                    DbColumnInfo loc9 = loc3[object_id][column];
                    if (loc9.IsPrimary == false && is_primary_key)
                    {
                        loc9.IsPrimary = is_primary_key;
                    }

                    Dictionary <string, DbIndexInfo> loc10 = null;
                    DbIndexInfo loc11 = null;
                    if (!indexColumns.TryGetValue(object_id, out loc10))
                    {
                        indexColumns.Add(object_id, loc10 = new Dictionary <string, DbIndexInfo>());
                    }
                    if (!loc10.TryGetValue(index_id, out loc11))
                    {
                        loc10.Add(index_id, loc11 = new DbIndexInfo());
                    }
                    loc11.Columns.Add(new DbIndexColumnInfo {
                        Column = loc9, IsDesc = is_desc
                    });
                    if (is_unique && !is_primary_key)
                    {
                        if (!uniqueColumns.TryGetValue(object_id, out loc10))
                        {
                            uniqueColumns.Add(object_id, loc10 = new Dictionary <string, DbIndexInfo>());
                        }
                        if (!loc10.TryGetValue(index_id, out loc11))
                        {
                            loc10.Add(index_id, loc11 = new DbIndexInfo());
                        }
                        loc11.Columns.Add(new DbIndexColumnInfo {
                            Column = loc9, IsDesc = is_desc
                        });
                    }
                }
                foreach (var object_id in indexColumns.Keys)
                {
                    foreach (var column in indexColumns[object_id])
                    {
                        loc2[object_id].IndexesDict.Add(column.Key, column.Value);
                    }
                }
                foreach (var object_id in uniqueColumns.Keys)
                {
                    foreach (var column in uniqueColumns[object_id])
                    {
                        column.Value.Columns.Sort((c1, c2) => c1.Column.Name.CompareTo(c2.Column.Name));
                        loc2[object_id].UniquesDict.Add(column.Key, column.Value);
                    }
                }

                sql = $@"
use [{db}];
select 
 b.object_id 'Object_id'
,c.name 'Column'
,e.name 'FKId'
,a.referenced_object_id
,cast(1 as bit) 'IsForeignKey'
,d.name 'Referenced_Column'
,null 'Referenced_Sln'
,null 'Referenced_Table'
from sys.foreign_key_columns a
inner join sys.tables b on b.object_id = a.parent_object_id
inner join sys.columns c on c.object_id = a.parent_object_id and c.column_id = a.parent_column_id
inner join sys.columns d on d.object_id = a.referenced_object_id and d.column_id = a.referenced_column_id
left join sys.foreign_keys e on e.object_id = a.constraint_object_id
where {loc8.ToString().Replace("a.table_name", "b.object_id")}
;
use [{olddatabase}];
";
                ds  = _orm.Ado.ExecuteArray(CommandType.Text, sql);
                if (ds == null)
                {
                    return(loc1);
                }

                var fkColumns = new Dictionary <int, Dictionary <string, DbForeignInfo> >();
                foreach (object[] row in ds)
                {
                    int object_id, referenced_object_id;
                    int.TryParse(string.Concat(row[0]), out object_id);
                    var    column = string.Concat(row[1]);
                    string fk_id  = string.Concat(row[2]);
                    int.TryParse(string.Concat(row[3]), out referenced_object_id);
                    var          is_foreign_key    = bool.Parse(string.Concat(row[4]));
                    var          referenced_column = string.Concat(row[5]);
                    var          referenced_db     = string.Concat(row[6]);
                    var          referenced_table  = string.Concat(row[7]);
                    DbColumnInfo loc9      = loc3[object_id][column];
                    DbTableInfo  loc10     = null;
                    DbColumnInfo loc11     = null;
                    bool         isThisSln = referenced_object_id != 0;

                    if (isThisSln)
                    {
                        loc10 = loc2[referenced_object_id];
                        loc11 = loc3[referenced_object_id][referenced_column];
                    }
                    else
                    {
                    }
                    Dictionary <string, DbForeignInfo> loc12 = null;
                    DbForeignInfo loc13 = null;
                    if (!fkColumns.TryGetValue(object_id, out loc12))
                    {
                        fkColumns.Add(object_id, loc12 = new Dictionary <string, DbForeignInfo>());
                    }
                    if (!loc12.TryGetValue(fk_id, out loc13))
                    {
                        loc12.Add(fk_id, loc13 = new DbForeignInfo {
                            Table = loc2[object_id], ReferencedTable = loc10
                        });
                    }
                    loc13.Columns.Add(loc9);
                    loc13.ReferencedColumns.Add(loc11);
                }
                foreach (var table_id in fkColumns.Keys)
                {
                    foreach (var fk in fkColumns[table_id])
                    {
                        loc2[table_id].ForeignsDict.Add(fk.Key, fk.Value);
                    }
                }

                foreach (var table_id in loc3.Keys)
                {
                    foreach (var loc5 in loc3[table_id].Values)
                    {
                        loc2[table_id].Columns.Add(loc5);
                        if (loc5.IsIdentity)
                        {
                            loc2[table_id].Identitys.Add(loc5);
                        }
                        if (loc5.IsPrimary)
                        {
                            loc2[table_id].Primarys.Add(loc5);
                        }
                    }
                }
                foreach (var loc4 in loc2.Values)
                {
                    //if (loc4.Primarys.Count == 0 && loc4.UniquesDict.Count > 0)
                    //{
                    //    foreach (var loc5 in loc4.UniquesDict.First().Value.Columns)
                    //    {
                    //        loc5.Column.IsPrimary = true;
                    //        loc4.Primarys.Add(loc5.Column);
                    //    }
                    //}
                    loc4.Primarys.Sort((c1, c2) => c1.Name.CompareTo(c2.Name));
                    loc4.Columns.Sort((c1, c2) =>
                    {
                        int compare = c2.IsPrimary.CompareTo(c1.IsPrimary);
                        if (compare == 0)
                        {
                            bool b1 = loc4.ForeignsDict.Values.Where(fk => fk.Columns.Where(c3 => c3.Name == c1.Name).Any()).Any();
                            bool b2 = loc4.ForeignsDict.Values.Where(fk => fk.Columns.Where(c3 => c3.Name == c2.Name).Any()).Any();
                            compare = b2.CompareTo(b1);
                        }
                        if (compare == 0)
                        {
                            compare = c1.Name.CompareTo(c2.Name);
                        }
                        return(compare);
                    });
                    loc1.Add(loc4);
                }
                loc1.Sort((t1, t2) =>
                {
                    var ret = t1.Schema.CompareTo(t2.Schema);
                    if (ret == 0)
                    {
                        ret = t1.Name.CompareTo(t2.Name);
                    }
                    return(ret);
                });

                loc2.Clear();
                loc3.Clear();
                tables.AddRange(loc1);
            }
            return(tables);
        }
示例#25
0
 public int GetDbType(DbColumnInfo column) => (int)GetSqlDbType(column);
示例#26
0
 /// <summary>
 /// null.
 /// </summary>
 /// <param name="column">Coluna.</param>
 /// <returns>null.</returns>
 public override string MethodDeclaration(DbColumnInfo column) => null;
示例#27
0
 public string GetCsStringify(DbColumnInfo column) => _dicDbToCs.TryGetValue(column.DbTypeTextFull, out var trydc) ? trydc.csStringify : null;
示例#28
0
 /// <summary>
 /// null.
 /// </summary>
 /// <param name="column">Coluna.</param>
 /// <returns>null.</returns>
 public override string ConstrutorBody(DbColumnInfo column) => null;
示例#29
0
 public Type GetCsTypeInfo(DbColumnInfo column) => _dicDbToCs.TryGetValue(column.DbTypeTextFull, out var trydc) ? trydc.csTypeInfo : null;
示例#30
0
        private bool IsPrimaryKey(DbColumnInfo it)
        {
            var result = GetPrimaryKeys().Any(p => p.Equals(it.DbColumnName, StringComparison.CurrentCultureIgnoreCase) || p.Equals(it.PropertyName, StringComparison.CurrentCultureIgnoreCase));

            return(result);
        }