private void LoadFieldDefs(InDbTableDef tableDef)
        {
            SqlCommand command = this.Connection.CreateCommand();

            command.CommandText = string.Format("SELECT\tCOLUMN_NAME, IS_NULLABLE, CHARACTER_MAXIMUM_LENGTH,  DATA_TYPE, NUMERIC_PRECISION, NUMERIC_SCALE  FROM INFORMATION_SCHEMA.COLUMNS  WHERE TABLE_NAME = '{0}' AND TABLE_SCHEMA = '{1}'  ORDER BY ORDINAL_POSITION", (object)tableDef.Name, (object)this.GetSchemaName());
            using (IDataReader dataReader = (IDataReader)command.ExecuteReader())
            {
                object[] values = new object[6];
                while (dataReader.Read())
                {
                    dataReader.GetValues(values);
                    int      size         = 0;
                    string   name         = values[0].ToString();
                    DataType inDbDataType = InDbSqlDatabase.SqlDataTypeToInDbDataType(values[3].ToString(), values[5] == DBNull.Value ? 0 : Convert.ToInt32(values[5]));
                    if (inDbDataType == DataType.String)
                    {
                        size = values[2] == DBNull.Value ? 0 : Convert.ToInt32(values[2]);
                    }
                    tableDef.FieldDefs.Add(new InDbFieldDef(name, inDbDataType, size, false));
                }
            }
        }
        protected void CreateTable(InDbTableDef tableDef)
        {
            StringCollection stringCollection = new StringCollection();

            foreach (InDbFieldDef fieldDef in tableDef.FieldDefs)
            {
                stringCollection.Add(string.Format("[{0}] {1}", (object)fieldDef.Name, (object)InDbSqlDatabase.InDbFieldDefToSqlDataType(fieldDef)));
            }
            string str = string.Format("CREATE TABLE {0}.[{1}] ({2}", (object)this.GetSchemaName(), (object)tableDef.Name, (object)StrUtils.Join((IList)stringCollection, "{0}", ","));

            if (tableDef.PrimaryKey != null)
            {
                str = str + ", PRIMARY KEY (" + StrUtils.Join((IList)tableDef.PrimaryKey.FieldDefs.GetFieldNames(), "[{0}]", ",") + ")";
            }
            this.Execute(str + ")");
            try
            {
                for (int index = 0; index < tableDef.IndexDefs.Count; ++index)
                {
                    InDbIndexDef indexDef = tableDef.IndexDefs[index];
                    if (indexDef != tableDef.PrimaryKey)
                    {
                        indexDef.FName = "Index" + (object)index;
                        this.CreateIndex(tableDef.Name, indexDef);
                    }
                }
            }
            catch (Exception ex)
            {
                this.DeleteTable(tableDef.Name);
                throw;
            }
        }