Как получить имена баз данных с данного сервера Sql в LINQ - PullRequest
2 голосов
/ 05 февраля 2010

У меня DropDownList отображает все серверы, присутствующие в моей сети Я хочу заполнить имена баз данных, когда я изменил их в другое раскрывающееся меню Я хочу запрос LINQ, чтобы получить это.

Ответы [ 3 ]

3 голосов
/ 05 февраля 2010

См. Вопрос здесь о том, как получить список баз данных, доступных для вошедшего в систему пользователя:

SELECT name
FROM sys.sysdatabases
WHERE HAS_DBACCESS(name) = 1

Для реализации этого в LINQ требуется опубликовать представление sysdatabases в собственном представлении. Я бы порекомендовал создать представление для работы в одной из баз данных:

CREATE VIEW [dbo].[vewDatabases]
AS
SELECT  name
FROM    sys.sysdatabases
WHERE   HAS_DBACCESS(name) = 1

GO

Добавьте это к вашей модели данных LINQ, и вы сможете выбрать из нее, например, так: [c #]:

var databaseNames = serverDataContext.vewDatabases.Select(a => a.name);

Затем вы можете заполнить DropDownList содержимым databaseNames.

1 голос
/ 05 февраля 2010

Попробуйте код ниже:

    protected void ddList_SelectedIndexChanged(object sender, EventArgs e)
    {
        PopulateDatabaseDropDown(ddList.SelectedItem.Text);
    }
    private void PopulateDatabaseDropDown(string server)
    {
        ddDatabase.DataSource = DatabaseName(server);
        ddDatabase.DataValueField = "DatabaseId";
        ddDatabase.DataTextField = "Name";            
        ddDatabase.DataBind();
    }
    private DataBase[] DatabaseName(string serverName)
    {
        List<DataBase> data = new List<DataBase>();
        System.Data.Linq.DataContext db = new System.Data.Linq.DataContext("Data Source="+serverName+";Initial Catalog=master;Integrated Security=SSPI");
       var dbName = db.ExecuteQuery<DataBase>("select database_id, [name] from sys.databases").AsEnumerable();
       foreach (var item in dbName)
           data.Add(new DataBase() { DatabaseId = item.DatabaseId, Name = item.Name });
       return data.ToArray();
    }
}
public class DataBase
{
    public string Name { get; set; }
    public int DatabaseId { get; set; }
}
1 голос
/ 05 февраля 2010

Я не думаю, что это работа для Linq2SQL (хотя я не слишком знаком с ней).

По сути, я думаю, что вы можете получить желаемые результаты, посмотрев одну из таблиц SYS_ или хранимую процедуру SP_. Не могу вспомнить, какое - давно, так как я что-то делал с SQL Server.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...