C# 我可以在C应用程序中获取SQL Server数据库的所有表的名称吗?
我想在我的C应用程序中获取SQL Server数据库的所有表的名称。可能吗?请告诉我解决方案。为以下对象运行sql命令:C# 我可以在C应用程序中获取SQL Server数据库的所有表的名称吗?,c#,sql-server,C#,Sql Server,我想在我的C应用程序中获取SQL Server数据库的所有表的名称。可能吗?请告诉我解决方案。为以下对象运行sql命令: SELECT name FROM sysobjects WHERE xtype = 'U' 有关一种方法,请参见: System.Data.SqlClient.SqlConnection SqlCon = new System.Data.SqlClient.SqlConnection("server=192.168.0.1;uid=sa;pwd=1234"); SqlCon
SELECT name FROM sysobjects WHERE xtype = 'U'
有关一种方法,请参见:
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));
}
就这么简单:
DataTable t = _conn.GetSchema("Tables");
其中_conn是已连接到正确数据库的SqlConnection对象。如果要从数据库中获取所有表名,可以执行以下操作:
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();
}
使用另一个响应获取所有数据库,并创建到每个数据库的连接,并使用函数GetAllTables从该数据库获取所有表名。另一种解决方案:
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;
}
另一种方式,但值得一提: Microsoft.SqlServer.Smo.dll中包含的API使访问数据库变得非常方便:
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;
}
}
最酷的是,Microsoft.SqlServer.Management.Smo.Table对象允许您执行各种操作,如更改架构、脚本等 我的yonexbat答案版本
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;
}
感谢斯拉格斯特的回答。下面是如何查看数据库中表列表的详细说明 在asp.net表单中添加以下内容:
<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>
别忘了加上
using System.Data;
及
在页面顶部/父类内部
在页面加载时:
objConn.ConnectionString = ConfigurationManager.ConnectionStrings[connString].ConnectionString;
connString是一个名为connectionClass.cs的类文件,存储在App_代码文件夹中
public class connectionClass
{
.....
public string connClass()
{
connString = "LocalSqlServer"; // LOCAL home PC Version
}
}
最后是web.config
<add name="LocalSqlServer" connectionString="Data Source=MyPCsName\SQLEXPRESS;Initial Catalog=databasename;Integrated Security=True" providerName="System.Data.SqlClient"/>
例如,我将此扩展方法用于SqlConnection:
您甚至不需要存储过程:问题是列出所有表而不是数据库。与基于查询的方法相比,此方法的一个优点是,您可以在DataTable中获取有关表的元数据,而使用查询并不简单。但我刚刚意识到你们只需要名字:我们怎么能只为用户定义的表指定U呢?你们看到slugster的答案了吗?你们的代码确实有效。但您没有打开和关闭连接。我认为应该是if行[3]。ToString.EqualBase表,StringComparison.OrdinalIgnoreCase
public class connectionClass
{
.....
public string connClass()
{
connString = "LocalSqlServer"; // LOCAL home PC Version
}
}
<add name="LocalSqlServer" connectionString="Data Source=MyPCsName\SQLEXPRESS;Initial Catalog=databasename;Integrated Security=True" providerName="System.Data.SqlClient"/>
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>();
}