我让DropDownList显示我的网络中存在的所有服务器,当我将其更改为另一个下拉列表时,我想要填充数据库名称,我想要一个LINQ查询来获得此结果。
发布于 2010-02-05 21:59:34
有关如何获取登录用户可用的数据库列表的信息,请参阅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。
发布于 2010-02-05 21:56:45
我不认为这是Linq2SQL的工作(尽管我不太熟悉它)。
基本上,我认为您可以通过查看某个SYS_表或SP_存储过程来获得所需的结果。记不清是哪个了--我已经有一段时间没用过SQL Server了。
发布于 2010-02-05 23:18:42
尝试下面的代码:
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; }
}https://stackoverflow.com/questions/2207569
复制相似问题