如何从LINQ中的给定Sql Server获取数据库名称

时间:2010-02-05 13:45:35

标签: asp.net sql-server linq

我有下拉列表显示我网络中存在的所有服务器 当我将其更改为另一个下拉列表时,我想填充数据库名称 我想要一个LINQ查询来获取它。

3 个答案:

答案 0 :(得分:3)

请参阅question here,了解如何获取登录用户可用的数据库列表:

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);

然后,您可以使用databaseNames的内容填充DropDownList

答案 1 :(得分:1)

我认为这不是Linq2SQL的工作(虽然我对它不太熟悉)。

基本上,我认为您可以通过查看其中一个SYS_表或SP_存储过程来获得所需的结果。不记得是哪一次 - 因为我用SQL Server做了一些事情。

答案 2 :(得分:1)

尝试以下代码:

    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; }
}