我有下拉列表显示我网络中存在的所有服务器 当我将其更改为另一个下拉列表时,我想填充数据库名称 我想要一个LINQ查询来获取它。
答案 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; }
}