2010-02-05 67 views

回答

1

我不認爲這是Linq2SQL的工作(儘管我不太熟悉它)。

基本上,我認爲你可以通過查看SYS_表或SP_存儲過程之一來獲得想要的結果。由於我對SQL Server做了任何事情,所以不記得是哪一段時間。

3

查看如何讓數據庫可供登錄的用戶列表中的question here

SELECT name 
FROM sys.sysdatabases 
WHERE HAS_DBACCESS(name) = 1 

實現這個到LINQ需要你的​​視圖發佈到自己的看法。我建議創建作業的視圖在數據庫中的一個:

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

試試下面的代碼:

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; } 
} 
相關問題