2010-01-25 6 views
0

Lorsque j'écris du code C#, si je parviens à obtenir une SqlConnection, est-il possible d'effectuer une requête pour obtenir la taille de la base de données?comment interroger la taille de la base de données du serveur sql

J'ai cherché sur Internet, semble "sp_spaceused" peut être utilisé, mais ce n'est pas une table, c'est une procédure.

Puis-je interroger une procédure?

Répondre

3

Le code suivant (extrait d'un testharness d'application de console) appelle la procédure sp_eus utilisant ADO.NET, puis itère le lecteur de données résultant pour obtenir la taille de la base de données.

Cela fonctionne, mais je ne peux pas dire qu'il n'y a pas un moyen plus efficace ou plus direct de réaliser ce que vous voulez.

Une implémentation alternative serait d'enrouler la procédure sp_spaceused dans votre propre procédure qui donne les données exactes dont vous avez besoin en tant que valeur de retour scalaire.

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

pour une seule table, vous pouvez utiliser: ainsi ne sp_spaceused en utilisant C# pour une seule table ceci fonctionne:

 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"]); 
      } 
     } 
    } 
Questions connexes