public static IEnumerable<Column> GetTableDefinitionFromDatabase(string connectionString, string tableName, ModelRoot root)
{
try
{
var retval = new List<Column>();
//Columns
var connection = DatabaseHelper.GetConnection(connectionString);
var columnReader = (SqlDataReader)DatabaseHelper.ExecuteReader(connectionString, CommandType.Text, GetSqlColumnsForTable(tableName));
while (columnReader.Read())
{
var columnName = columnReader["columnName"].ToString();
if (StringHelper.Match(columnName, root.Database.CreatedByColumnName) || StringHelper.Match(columnName, root.Database.CreatedDateColumnName))
{
//Do Nothing
}
else if (StringHelper.Match(columnName, root.Database.ModifiedByColumnName) || StringHelper.Match(columnName, root.Database.ModifiedDateColumnName) ||
StringHelper.Match(columnName, "updated_by") || StringHelper.Match(columnName, "updated_date"))
{
//Do Nothing
}
else if (StringHelper.Match(columnName, root.Database.TimestampColumnName))
{
//Do Nothing
}
else
{
var currentColumn = new Column(root);
currentColumn.Name = columnName;
if (!ValidationHelper.ValidDatabaseIdenitifer(currentColumn.Name))
{
currentColumn.CodeFacade = ValidationHelper.MakeDatabaseIdentifier(currentColumn.Name);
}
//currentColumn.ParentTableRef = currentTable.CreateRef();
currentColumn.AllowNull = bool.Parse(columnReader["allowNull"].ToString());
if (bool.Parse(columnReader["isIdentity"].ToString()))
currentColumn.Identity = IdentityTypeConstants.Database;
else
currentColumn.Identity = IdentityTypeConstants.None;
if (columnReader["isPrimaryKey"] != System.DBNull.Value)
currentColumn.PrimaryKey = true;
//currentColumn.PrimaryKey = bool.Parse(columnReader["isPrimaryKey"].ToString());
try
{
//string columnTypename = columnReader["datatype"].ToString();
//if (StringHelper.Match(columnTypename, "numeric", true))
// currentColumn.DataType = SqlDbType.Decimal;
//else
// currentColumn.DataType = (SqlDbType)Enum.Parse(typeof(SqlDbType), columnTypename, true);
currentColumn.DataType = DatabaseHelper.GetSQLDataType((SqlNativeTypes)int.Parse(columnReader["xtype"].ToString()));
}
catch { }
var defaultvalue = columnReader["defaultValue"].ToString();
SetupDefault(currentColumn, defaultvalue);
currentColumn.Length = (int)columnReader["length"];
if (CanUseExtendedProperty(connectionString))
{
var columnAttributeReader = (SqlDataReader)DatabaseHelper.ExecuteReader(connection, CommandType.Text, "SELECT name, value FROM ::fn_listextendedproperty (default,'user', 'dbo', 'table', '" + tableName + "', 'column', '" + currentColumn + "')");
while (columnAttributeReader.Read())
{
var attribName = string.Empty;
attribName = columnAttributeReader["name"].ToString();
if (attribName.ToLower().Equals("ms_description"))
{
currentColumn.Description = columnAttributeReader["value"].ToString();
}
}
columnAttributeReader.Close();
}
retval.Add(currentColumn);
} //Create New Column
}
columnReader.Close();
return retval;
}
catch (Exception ex)
{
throw;
}
}