【问题标题】:How to get Database names from given Sql Server in LINQ如何从 LINQ 中的给定 Sql Server 获取数据库名称
【发布时间】:2010-02-05 13:45:35
【问题描述】:

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

【问题讨论】:

  • 为什么要为此进行 LINQ 查询?不是所有的东西都是钉子吗?

标签: asp.net sql-server linq


【解决方案1】:

请参阅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

【讨论】:

    【解决方案2】:

    我不认为这是 Linq2SQL 的工作(尽管我对它并不太熟悉)。

    基本上,我认为您可以通过查看其中一个 SYS_ 表或 SP_ 存储过程来获得所需的结果。不记得是哪一个 - 我已经有一段时间没有使用 SQL Server 做了任何事情了。

    【讨论】:

      【解决方案3】:

      试试下面的代码:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-03-29
        • 2021-12-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-08-26
        • 1970-01-01
        相关资源
        最近更新 更多