Quiero obtener el nombre de toda la tabla de la base de datos de SQL Server en mi aplicación C#. ¿Es posible? Por favor dime Solución.¿Puedo obtener el nombre de todas las tablas de la base de datos de SQL Server en la aplicación C#?
¿Puedo obtener el nombre de todas las tablas de la base de datos de SQL Server en la aplicación C#?
Respuesta
Es tan simple como esto:
DataTable t = _conn.GetSchema("Tables");
donde _conn
es un objeto SqlConnection que ya se ha conectado a la base de datos correcta.
Ejecutar un comando SQL para:
SELECT name FROM sysobjects WHERE xtype = 'U'
Ver How to get a list of SQL Server databases de una manera:
System.Data.SqlClient.SqlConnection SqlCon = new System.Data.SqlClient.SqlConnection("server=192.168.0.1;uid=sa;pwd=1234");
SqlCon.Open();
System.Data.SqlClient.SqlCommand SqlCom = new System.Data.SqlClient.SqlCommand();
SqlCom.Connection = SqlCon;
SqlCom.CommandType = CommandType.StoredProcedure;
SqlCom.CommandText = "sp_databases";
System.Data.SqlClient.SqlDataReader SqlDR;
SqlDR = SqlCom.ExecuteReader();
while(SqlDR.Read())
{
MessageBox.Show(SqlDR.GetString(0));
}
Usted ni siquiera necesita el procedimiento almacenado :) – slugster
Se trata de bases de datos, tablas y no como pedido, a la derecha ? –
Si desea obtener todos los nombres de tabla de una base de datos, puede hacer algo como esto;
string[] GetAllTables(SqlConnection connection)
{
List<string> result = new List<string>();
SqlCommand cmd = new SqlCommand("SELECT name FROM sys.Tables", connection);
System.Data.SqlClient.SqlDataReader reader = cmd.ExecuteReader();
while(reader.Read())
result.Add(reader["name"].ToString());
return result.ToArray();
}
conseguir todas las bases de datos utilizando la otra respuesta y crear una conexión con cada uno y utiliza las "GetAllTables" función para obtener todos los nombres de las tablas de ese db.
Tu código funciona. Sin embargo, fallaste en abrir y cerrar la conexión. –
Sólo otra solución:
public IList<string> ListTables()
{
List<string> tables = new List<string>();
DataTable dt = _connection.GetSchema("Tables");
foreach (DataRow row in dt.Rows)
{
string tablename = (string)row[2];
tables.Add(tablename);
}
return tables;
}
¿Has visto respuesta slugster? –
'(cadena) fila [2];' me ayudó. Gracias. –
Otra forma, pero vale la pena mencionar: La API contenida en Microsoft.SqlServer.Smo.dll lo hace muy a la base de datos de acceso:
private IEnumerable<string> getAllTables()
{
var sqlConnection = new System.Data.SqlClient.SqlConnection(connectionString);
var serverConnection = new Microsoft.SqlServer.Management.Common.ServerConnection(sqlConnection);
var server = new Microsoft.SqlServer.Management.Smo.Server(serverConnection);
var database = server.Databases[databaseName];
foreach (Microsoft.SqlServer.Management.Smo.Table table in database.Tables)
{
yield return table.Name;
}
}
La cosa más fresca es que el objeto Microsoft.SqlServer.Management.Smo.Table le permite realizar todo tipo de operaciones, como cambiar esquema, scripting, etc. ...
Mi versión de yonexbat respuesta
public System.Collections.Generic.Dictionary<string, string> GetAllTables(System.Data.SqlClient.SqlConnection _connection)
{
if (_connection.State == System.Data.ConnectionState.Closed)
_connection.Open();
System.Data.DataTable dt = _connection.GetSchema("Tables");
System.Collections.Generic.Dictionary<string, string> tables = new System.Collections.Generic.Dictionary<string, string>();
foreach (System.Data.DataRow row in dt.Rows)
{
if (row[3].ToString().Equals("BASE TABLE", StringComparison.OrdinalIgnoreCase)) //ignore views
{
string tableName = row[2].ToString();
string schema = row[1].ToString();
tables.Add(tableName, schema);
}
}
_connection.Close();
return tables;
}
Gracias a Slugster por su respuesta. Aquí hay una explicación ampliada de cómo ver una lista de las tablas en una base de datos.
en una forma asp.net añadir lo siguiente:
<div>
<asp:Button ID="GridViewTableListButton" runat="server" Text="List all Tables on server"
onclick="GridViewTableListButton_Click" />
<asp:GridView ID="GridViewTableList" runat="server">
</asp:GridView>
</div>
continuación, en C# código detrás de añadir la siguiente función:
protected void GridViewTableListButton_Click(object sender, EventArgs e)
{
objConn.Open();
DataTable t = objConn.GetSchema("Tables");
GridViewTableList.DataSource = t;
GridViewTableList.DataBind();
objConn.Close();
}
sin olvidar añadir
using System.Data;
y
SqlConnection objConn = new SqlConnection();
en la parte superior de su página/dentro de su clase principal.
Con dentro de su Page_Load:
objConn.ConnectionString = ConfigurationManager.ConnectionStrings[connString].ConnectionString;
connString es un archivo de clase (llamada connectionClass.cs) que se almacena en la carpeta App_Code
public class connectionClass
{
.....
public string connClass()
{
connString = "LocalSqlServer"; // LOCAL home PC Version
}
}
, finalmente, en la web.config
<add name="LocalSqlServer" connectionString="Data Source=MyPCsName\SQLEXPRESS;Initial Catalog=databasename;Integrated Security=True" providerName="System.Data.SqlClient"/>
por ejemplo
estoy usando este ExtensionMethod
de SqlConnection
:
public static List<string> GetTableNames(this SqlConnection connection)
{
using(SqlConnection conn = connection)
{
if(conn.State == ConnectionState.Open)
{
return conn.GetSchema("Tables").AsEnumerable().Select(s => s[2].ToString()).ToList();
}
}
//Add some error-handling instead !
return new List<string>();
}
- 1. Lista de todas las tablas en la base de datos
- 2. Renombrar todas las tablas en la base de datos
- 3. Consulta para obtener los nombres de todas las tablas en la base de datos de SQL Server 2008
- 4. Buscar todas las columnas de un cierto tipo en todas las tablas en una base de datos SQL Server
- 5. Seleccionar todas las columnas de todas las tablas de SQL Server 2008
- 6. ¿Cómo colocar todas las tablas en la base de datos sin soltar la base de datos?
- 7. Exportar todas las tablas de SQL Server a archivos separados
- 8. Listar todas las tablas en una base de datos
- 9. SQL Server - Crear un único disparador que se ejecuta para TODAS las tablas de la base de datos
- 10. ¿Cómo puedo listar todas las tablas en una base de datos con Squirrel SQL?
- 11. ¿Cómo puedo crear una nueva base de datos SQLite, con todas las tablas, sobre la marcha?
- 12. Cambiar el nombre del archivo de datos de la base de datos en SQL Server 2005
- 13. ¿podemos listar todas las tablas en la base de datos msaccess usando sql?
- 14. ¿Cómo obtener la lista de tablas en la base de datos, usando MS SQL 2008?
- 15. Número total de campos en todas las tablas de la base de datos
- 16. Sql SMO: ¿Cómo obtener la ruta del nombre de archivo físico de la base de datos?
- 17. Base de datos de secuencias de comandos SQL-Server
- 18. Exponer la base de datos de SQL Server como servicio web para obtener datos de
- 19. Alterar las tablas de la base de datos en Django
- 20. Obtenga todas las tablas y todas las columnas de una base de datos odbc
- 21. Consulta SQL para mostrar todas las vistas en una base de datos de SQL Server 2005
- 22. Cómo colocar todas las tablas de la base de datos con manage.py CLI en Django?
- 23. En MySQL, ¿cómo cambio el nombre de las tablas dentro de una base de datos?
- 24. Evite el cursor de la base de datos en SQL Server
- 25. Cómo colocar todas las tablas de una base de datos en SQL Server 2005 en una declaración, excepto una tabla
- 26. Obtenga recuentos de todas las tablas en la base de datos MySQL
- 27. Cómo obtener una lista de todas las tablas en dos bases de datos diferentes
- 28. Base de datos por aplicación VS Una gran base de datos para todas las aplicaciones
- 29. ¿Cómo puedo consultar el nombre de la instancia actual de la base de datos de SQL Server?
- 30. Uso tablediff de comparar todas las tablas
Una ventaja de este método sobre los métodos basados en consultas es que obtienes metadatos sobre las tablas en una DataTable, que no es simple al usar consultas. (Pero me acabo de dar cuenta de que solo necesitas nombres :)) – apoorv020