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:
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:
Publicar un comentario