private static DatabaseUtility.Schema.ResultSet GetResultSet(DataTable resultSetSchemaInfo,String suffix) { var resultSet = new DatabaseUtility.Schema.ResultSet(); resultSet.Name = "ResultSet" + suffix; for (int j = 0; j < resultSetSchemaInfo.Rows.Count; j++) { DatabaseUtility.Schema.DatabaseField field = new DatabaseUtility.Schema.DatabaseField(); var dbType = (System.Data.SqlDbType) Convert.ToInt32(resultSetSchemaInfo.Rows[j]["ProviderType"]); field.Name = resultSetSchemaInfo.Rows[j]["ColumnName"].ToString(); field.Type = DatabaseTypeMapping.SqlMapping[dbType]; field.Ordinal = Convert.ToInt32(resultSetSchemaInfo.Rows[j]["ColumnOrdinal"]); field.Nullable = Convert.ToBoolean(resultSetSchemaInfo.Rows[j]["AllowDBNull"]); field.Size = Convert.ToInt32(resultSetSchemaInfo.Rows[j]["ColumnSize"]); resultSet.Columns.Add(field); } return resultSet; }
private void Materialize(DatabaseSchema result, System.Data.SqlClient.SqlDataReader reader) { var sprocName = reader["StoredProcedureName"].ToString(); var fieldName = reader["Name"].ToString(); var isParameterStr = reader["IsParameter"].ToString(); var resultSetName = reader["ResultSetName"].ToString(); var direction = reader["ParameterDirection"].ToString(); var dbType = reader["DatabaseType"].ToString(); var ordinal = reader["Ordinal"].ToString(); var nullable = reader["Nullable"].ToString(); var size = reader["SIZE"].ToString(); var sproc = (from sp in result.StoredProcedures where sp.Name == sprocName select sp).SingleOrDefault(); if (sproc == null) { sproc = new StoredProcedure() {Name = sprocName}; result.StoredProcedures.Add(sproc); } Boolean isParameter = true; if(Boolean.TryParse(isParameterStr,out isParameter ) && isParameter) { var param = new DatabaseUtility.Schema.Parameter(); param.Name = fieldName; param.Direction = (DatabaseUtility.Schema.ParameterDirection) Enum.Parse(typeof (DatabaseUtility.Schema.ParameterDirection), direction); param.Type = (DatabaseUtility.Schema.DatabaseType) Enum.Parse(typeof (DatabaseUtility.Schema.DatabaseType), dbType); param.Ordinal = Convert.ToInt32(ordinal); param.Nullable = Convert.ToBoolean(nullable); param.Size = Convert.ToInt32(size); sproc.Parameters.Add(param); } else if (Boolean.TryParse(isParameterStr, out isParameter) && !isParameter) { var resultSet = (from rs in sproc.ResultSets where rs.Name == resultSetName select rs).SingleOrDefault(); if (resultSet == null) { resultSet = new ResultSet() { Name = resultSetName }; sproc.ResultSets.Add(resultSet); } var resultSetColumn = new DatabaseUtility.Schema.DatabaseField(); resultSetColumn.Name = fieldName; resultSetColumn.Type = (DatabaseUtility.Schema.DatabaseType) Enum.Parse(typeof(DatabaseUtility.Schema.DatabaseType), dbType); resultSetColumn.Ordinal = Convert.ToInt32(ordinal); resultSetColumn.Nullable = Convert.ToBoolean(nullable); resultSetColumn.Size = Convert.ToInt32(size); resultSet.Columns.Add(resultSetColumn); } }