【发布时间】:2010-02-05 13:45:35
【问题描述】:
我有 DropDownList 显示我网络中存在的所有服务器 当我将其更改为另一个下拉列表时,我想填充数据库名称 我想要一个 LINQ 查询来得到这个。
【问题讨论】:
-
为什么要为此进行 LINQ 查询?不是所有的东西都是钉子吗?
标签: asp.net sql-server linq
我有 DropDownList 显示我网络中存在的所有服务器 当我将其更改为另一个下拉列表时,我想填充数据库名称 我想要一个 LINQ 查询来得到这个。
【问题讨论】:
标签: asp.net sql-server linq
请参阅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。
【讨论】:
我不认为这是 Linq2SQL 的工作(尽管我对它并不太熟悉)。
基本上,我认为您可以通过查看其中一个 SYS_ 表或 SP_ 存储过程来获得所需的结果。不记得是哪一个 - 我已经有一段时间没有使用 SQL Server 做了任何事情了。
【讨论】:
试试下面的代码:
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; }
}
【讨论】: