Translate

miércoles, 20 de noviembre de 2013

Visual Studio: GetSchemaTable para obtener el schema de una tabla

GetSchemaTable, devuelve el schema de una tabla dada, pero para sacar la información interesante del resto que sobra tendremos que interpretar los datos que se nos devuelven en forma de tabla.
Pongo aquí abajo el código de una forma de hacerlo que se me ha ocurrido, la idea es que al final se nos devuelva en un listBox algo parecido a esto:

Captura

El primer método devuelve el Schema según lo hace la función GetSchemaTable, y el segundo descompone la información:

     public DataTable readSchemaFromTable(string conString, string queryString)
        {
            using (SqlConnection connection = new SqlConnection(conString))
            {
                using (SqlCommand command = new SqlCommand(queryString, connection))
                {
                    connection.Open();
                    using (SqlDataReader reader = command.ExecuteReader(CommandBehavior.KeyInfo))
                    {
                        DataTable table = reader.GetSchemaTable();
                        return table;
                    }
                }
            }            
        }
        private void readTableDataMenuItem_Click(object sender, EventArgs e)
        {
            //Leo datos de la tabla
            string conn = @”Integrated Security = true;
                            Initial catalog = ” + tBxCatalog.Text + @”;
                            Data Source = ” + tBxServer.Text + @”;”;
            string query = @”SELECT * FROM ” + tBxTable.Text;
            using (DataTable table = readDataToTable(conn, query))
            {
                //Conectamos al grid
                dBSrcSQL.DataSource = table;
                dGVTable.DataSource = dBSrcSQL;
            }
            //Leo el schema de la tabla
            using (DataTable schema = readSchemaFromTable(conn, query))
            {
                
                string cadena = “”;                
                string name =”";
                string dataType =”";
                string sizeData=”";
                string isKey=”";
                string isAuto = “”;
                //Pasamos los datos al list Box
                foreach (DataRow row in schema.Rows)
                {
                    foreach (DataColumn column in schema.Columns)
                    {
                        if (column.ColumnName == “ColumnName”)  
                            name = row[column].ToString();
                        else if (column.ColumnName == “DataTypeName”)
                                dataType = row[column].ToString();
                             else if (column.ColumnName == “ColumnSize”)
                                     sizeData=row[column].ToString();
                                  else if (column.ColumnName == “IsKey”)
                                        {
                                            if (row[column].ToString()==”True”) isKey = “isKey”;
                                            else isKey = “”;
                                            //isKey = row[column].ToString();
                                        }
                                        else if (column.ColumnName == “IsAutoIncrement”)
                                        {
                                            if (row[column].ToString()==”True”) isAuto = “isAutoIncrement”;
                                            else isAuto = “”;
                                        }
                            
                    }
                    cadena = name + ” ” + dataType + “(” + sizeData + “) ” + isKey + ” ” + isAuto;
                    lBxFields.Items.Add(cadena);
                    cadena = “”;
                }
            }
        }

No hay comentarios: