using System;
using System.Data;
using System.Data.SqlClient;
using System.Data.SqlTypes;
using Microsoft.SqlServer.Server;
using System.IO; /// to bring in the DriveInfo class
using System.Collections; /// bring in the IEnumberable defintion
public partial class UserDefinedFunctions
{
///
/// returns informatoin on alal drives in the system
///
///
[SqlFunction(FillRowMethodName = "FillRow",
TableDefinition ="letter nchar(1),total_mb bigint null," +
"free_mb bigint null,format nvarchar(32) null," +
"type nvarchar(32) null," +
"volume_label nvarchar(20) null")]
public static IEnumerable drive_info()
{
return System.IO.DriveInfo.GetDrives();
}
public static void FillRow(Object obj
, out char letter
, out SqlInt64 total_mb
, out SqlInt64 free_mb
, out string format
, out string type
, out string volume_label)
{
DriveInfo drive = (DriveInfo)obj;
letter = drive.Name[0];
type = drive.DriveType.ToString();
// Some drives might be empty and thus not IsReady
if (drive.IsReady)
{ total_mb = new SqlInt64(drive.TotalSize / 1048576);
free_mb = new SqlInt64(drive.TotalFreeSpace / 1048576);
format = drive.DriveFormat;
volume_label = drive.VolumeLabel;
}
else
{ total_mb = new SqlInt64();
free_mb = new SqlInt64();
format = null;
volume_label = null;
}
}
};