コード例 #1
0
        public FieldList GetFields(string tbl)
        {
            FieldList flds = null;

            if (_columns == null)
            {
                _columns = new Dictionary <string, FieldList>();
            }
            if (!_columns.TryGetValue(tbl, out flds))
            {
                if (bOpened)
                {
                    DbDataReader dr = null;

                    string sSQL;
                    sSQL = string.Format(System.Globalization.CultureInfo.InvariantCulture,
                                         "select COLUMN_NAME,DATA_TYPE,CHARACTER_MAXIMUM_LENGTH,COLUMN_KEY,COLUMN_TYPE, EXTRA from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = '{0}' and TABLE_SCHEMA = '{1}'  order by ORDINAL_POSITION", tbl, Schema);

                    DbCommand cmd = _connection.CreateCommand();
                    cmd.CommandType = System.Data.CommandType.Text;
                    cmd.CommandText = sSQL;
                    try
                    {
                        if (_connection.State == System.Data.ConnectionState.Closed)
                        {
                            _connection.Open();
                        }
                        dr   = cmd.ExecuteReader(CommandBehavior.CloseConnection);
                        flds = new FieldList();
                        int n = 0;
                        while (dr.Read())
                        {
                            EPField fld = new EPField();
                            fld.Name          = (string)dr[0];
                            fld.Indexed       = (string.CompareOrdinal("PRI", VPLUtil.ObjectToString(dr[3])) == 0);
                            fld.Index         = n;
                            fld.FromTableName = tbl;
                            bool bUnsigned = (VPLUtil.ObjectToString(dr[4]).IndexOf("unsigned", StringComparison.OrdinalIgnoreCase) >= 0);
                            fld.OleDbType = stringToOleDbType(VPLUtil.ObjectToString(dr[1]), bUnsigned);

                            if (dr[2] != null && dr[2] != DBNull.Value)
                            {
                                fld.DataSize = VPLUtil.ObjectToInt(dr[2]);
                            }
                            fld.IsIdentity = (string.Compare("auto_increment", VPLUtil.ObjectToString(dr[5]), StringComparison.OrdinalIgnoreCase) == 0);
                            flds.Add(fld);
                            n++;
                        }
                        _columns.Add(tbl, flds);
                    }
                    finally
                    {
                        if (dr != null)
                        {
                            dr.Close();
                            dr = null;
                        }
                        if (_connection.State != System.Data.ConnectionState.Closed)
                        {
                            _connection.Close();
                        }
                    }
                }
            }
            if (flds == null)
            {
                flds = new FieldList();
            }
            return(flds);
        }