Есть по крайней мере два способа сделать это. Один из них - использовать Database Metadata tables, чтобы использовать SQL Management objects, в обоих случаях там много данных, поэтому вам действительно нужно знать, чего вы хотите. Например, вы можете получить свойство «Только для базы данных», о котором вы упомянули.
Использование SqlCommand против метаданных
using (SqlConnection cnn = new SqlConnection("Data Source=.;Initial Catalog=master;Integrated Security=SSPI;"))
{
SqlCommand cmd = new SqlCommand("SELECT is_read_only FROM sys.filegroups",cnn);
cnn.Open();
var isReadOnly = cmd.ExecuteScalar();
Console.WriteLine(isReadOnly);
}
Использования SMO
using System;
using Microsoft.SqlServer.Management.Smo;
namespace SMO_Test
{
class Program
{
static void Main(string[] args)
{
Server srv = new Server(); //Connection to the local SQL Server
Database db = srv.Databases["master"];
foreach (FileGroup fg in db.FileGroups)
{
Console.WriteLine(fg.ReadOnly);
}
}
}
}
Я наконец использовал MetaData подход, но изменил SqlCommand строки: "SqlCommand CMD = новое SqlCommand (" SELECT DATABASEPROPERTYEX ('DatabaseNameHere', 'Updateability') ", myConnection); и он отлично работает. Спасибо за ваш вклад. – G21