79 lines
3.0 KiB
C#
79 lines
3.0 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Data;
|
|
using System.Data.SqlClient;
|
|
using System.Linq;
|
|
using VAR.DatabaseExplorer.Code.DataTransfer;
|
|
|
|
namespace VAR.DatabaseExplorer.Code.DataAccess
|
|
{
|
|
public class ColumnDA
|
|
{
|
|
public static List<Column> GetColumns(string conexionString, string tableSchema, string tableName)
|
|
{
|
|
var columns = new List<Column>();
|
|
var cnx = new SqlConnection(conexionString);
|
|
|
|
// Preparar comando y parametros
|
|
var da = new SqlDataAdapter(@"
|
|
SELECT col.COLUMN_NAME AS ColumnName,
|
|
col.DATA_TYPE AS Type,
|
|
col.CHARACTER_MAXIMUM_LENGTH AS Size,
|
|
c.CONSTRAINT_TYPE AS KeyType,
|
|
col.IS_NULLABLE AS Nullable
|
|
FROM INFORMATION_SCHEMA.COLUMNS AS col
|
|
LEFT JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE AS k
|
|
ON col.COLUMN_NAME=k.COLUMN_NAME AND
|
|
col.TABLE_NAME=k.TABLE_NAME AND
|
|
col.TABLE_SCHEMA=k.TABLE_SCHEMA
|
|
LEFT JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS AS c
|
|
ON k.CONSTRAINT_NAME=c.CONSTRAINT_NAME
|
|
WHERE col.TABLE_NAME=@TableName AND
|
|
col.TABLE_SCHEMA=@TableSchema
|
|
ORDER BY col.ORDINAL_POSITION
|
|
", cnx);
|
|
var prm = new SqlParameter("@TableName", SqlDbType.VarChar, 100) { Value = tableName };
|
|
da.SelectCommand.Parameters.Add(prm);
|
|
prm = new SqlParameter("@TableSchema", SqlDbType.VarChar, 100) { Value = tableSchema };
|
|
da.SelectCommand.Parameters.Add(prm);
|
|
|
|
// Obtener datatable con las columnas
|
|
var dt = new DataTable();
|
|
cnx.Open();
|
|
da.Fill(dt);
|
|
cnx.Close();
|
|
|
|
// Recorrer datatable estableciendo la lista de columnas
|
|
foreach (DataRow dr in dt.Rows)
|
|
{
|
|
string columnName = Convert.ToString(dr["ColumnName"]);
|
|
Column col = columns.FirstOrDefault(c => c.Name == columnName);
|
|
if (col == null)
|
|
{
|
|
col = new Column();
|
|
columns.Add(col);
|
|
}
|
|
|
|
col.Name = columnName;
|
|
|
|
col.Type = Convert.ToString(dr["Type"]);
|
|
|
|
if ((dr["Size"] is DBNull) == false)
|
|
{
|
|
col.Size = Convert.ToInt32(dr["Size"]);
|
|
}
|
|
|
|
string strNullable = (Convert.ToString(dr["Nullable"])).ToLower();
|
|
col.Nullable = (strNullable == "yes") || (strNullable == "1") || (strNullable == "true");
|
|
|
|
string KeyType = Convert.ToString(dr["KeyType"]).ToLower();
|
|
if (KeyType.Contains("primary"))
|
|
{
|
|
col.PK = true;
|
|
}
|
|
}
|
|
|
|
return columns;
|
|
}
|
|
}
|
|
} |