Je veux obtenir le nom de toutes les tables de la base de données SQL Server dans mon application C #. C'est possible? Plz dites moi la solution.
C'est aussi simple que cela:
DataTable t = _conn.GetSchema("Tables");
où _conn
est un objet SqlConnection déjà connecté à la base de données appropriée.
Juste une autre solution:
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;
}
Exécutez une commande sql pour:
SELECT name FROM sysobjects WHERE xtype = 'U'
Si vous voulez obtenir tous les noms de table d'une base de données, vous pouvez faire quelque chose comme ceci:
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();
}
Obtenez toutes les bases de données en utilisant l'autre réponse et créez une connexion à chacune et utilisez la fonction "GetAllTables" pour obtenir tous les noms de table de cette base.
J'utilise cette ExtensionMethod
pour 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>();
}
Voir Comment obtenir une liste de bases de données SQL Server pour un seul moyen:
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));
}
Une autre façon, mais il convient de mentionner: L’API contenue dans Microsoft.SqlServer.Smo.dll facilite grandement l’accès à la base de données:
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;
}
}
Le plus intéressant est que l’objet Microsoft.SqlServer.Management.Smo.Table vous permet d’effectuer toutes sortes d’opérations, telles que la modification de schéma, la création de scripts, etc.
Ma version de yonexbat répond
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;
}
Merci à Slugster pour sa réponse. Voici une explication détaillée sur la manière d’afficher une liste des tables d’une base de données.
dans un formulaire asp.net, ajoutez ce qui suit:
<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>
puis dans le code C #, ajoutez la fonction suivante:
protected void GridViewTableListButton_Click(object sender, EventArgs e)
{
objConn.Open();
DataTable t = objConn.GetSchema("Tables");
GridViewTableList.DataSource = t;
GridViewTableList.DataBind();
objConn.Close();
}
sans oublier d'ajouter
using System.Data;
et
SqlConnection objConn = new SqlConnection();
en haut de votre page/dans votre classe parente.
Avec dans votre Page_Load:
objConn.ConnectionString = ConfigurationManager.ConnectionStrings[connString].ConnectionString;
connString est un fichier de classe (appelé connectionClass.cs) stocké dans le dossier App_Code
public class connectionClass
{
.....
public string connClass()
{
connString = "LocalSqlServer"; // LOCAL home PC Version
}
}
puis enfin dans web.config
<add name="LocalSqlServer" connectionString="Data Source=MyPCsName\SQLEXPRESS;Initial Catalog=databasename;Integrated Security=True" providerName="System.Data.SqlClient"/>
par exemple