2010-01-25 34 views
0

在编写C#代码时,如果我可以设法获得SqlConnection,那么有没有办法执行查询来获取数据库的大小?如何查询sql server数据库大小

我搜索了互联网,似乎可以使用“sp_spaceused”,但它不是表格,它是一个程序。

我可以查询程序吗?

回答

3

以下代码(取自控制台应用程序testharness)使用ADO.NET调用sp_spaceused过程,然后迭代生成的数据读取器以获取数据库大小。

这是有效的,但我不能说没有更高效或直接的方式来实现你想要的。

一种替代实现方法是将sp_spaceused过程包装在您自己的过程中,该过程将所需的确切数据作为标量返回值。

class Program 
{ 
    static void Main(string[] args) 
    { 
     string strCount; 
     SqlConnection Conn = new SqlConnection 
      ("Data Source=ServerName;integrated " + 
      "Security=sspi;initial catalog=TestingDB;"); 
     SqlCommand testCMD = new SqlCommand 
      ("sp_spaceused", Conn); 

     testCMD.CommandType = CommandType.StoredProcedure;   

     Conn.Open(); 

     SqlDataReader reader = testCMD.ExecuteReader(); 

     if (reader.HasRows) 
     { 
      while (reader.Read()) 
      { 
       Console.WriteLine("Name: " + reader["database_name"]); 
       Console.WriteLine("Size: " + reader["database_size"]); 
      } 
     } 

     Console.ReadLine(); 
    } 
} 
0

为单一的表,你可以使用: 这样做使用C#为单一的表 注释sp_spaceused这将工作:

 public static void GetTableSpaceUsed(string tableName) 
    { 
     SqlConnection Conn = new SqlConnection(SqlHelper.GetConnection()); 
     SqlCommand spaceused = new SqlCommand("sp_spaceused", Conn); 

     spaceused.CommandType = CommandType.StoredProcedure; 
     spaceused.Parameters.AddWithValue("@objname", tableName); 
     Conn.Open(); 

     SqlDataReader reader = spaceused.ExecuteReader(); 

     if (reader.HasRows) 
     { 
      while (reader.Read()) 
      { 
       Console.WriteLine("Name: " + reader["name"]); 
       Console.WriteLine("Rows: " + reader["rows"]); 
       Console.WriteLine("Reserved: " + reader["reserved"]); 
       Console.WriteLine("Data: " + reader["data"]); 
       Console.WriteLine("Index size: " + reader["index_size"]); 
      } 
     } 
    }