繁体   English   中英

如何查询sql server数据库大小

[英]how to query sql server database size

在编写C#代码时,如果我可以设法获得SqlConnection,是否有任何方法可以执行查询以获取数据库的大小?

我在网上搜索,似乎可以使用“ sp_spaceused”,但它不是表,而是一个程序。

我可以查询程序吗?

以下代码(从控制台应用程序testharness中获取)使用ADO.NET调用sp_spaceused过程,然后迭代结果数据读取器以获取db大小。

这行得通,但是我不能说没有一种更有效或直接的方法来实现您想要的。

一种替代实现是将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();
    }
}

对于单个表,您可以使用:因此使用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"]);
            }
        }
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM