簡體   English   中英

如何使用 c#.net 從 combobox 中的 sql 服務器獲取所有數據庫的列表

[英]How to get list of all database from sql server in a combobox using c#.net

我通過文本框輸入源名稱用戶標識和密碼,並希望數據庫列表應列在組合框中,以便用戶可以選擇所有四個選項源名稱、用戶標識、密碼和數據庫名稱來執行連接

數據庫將根據用戶從其他系統中檢索。 用戶將輸入 IP、用戶 ID 和密碼,他們應該在組合框中獲得數據庫列表,以便他們可以 select 所需的數據庫並執行連接

private void frmConfig_Load(object sender, EventArgs e)
{
    try
    {
        string Conn = "server=servername;User Id=userid;" + "pwd=******;";
        con = new SqlConnection(Conn);
        con.Open();

        da = new SqlDataAdapter("SELECT * FROM sys.database", con);
        cbSrc.Items.Add(da);
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }
}

我正在嘗試這樣做,但它沒有生成任何數據

系統數據庫

SELECT name
FROM sys.databases;

編輯:

我建議使用 IDataReader,返回一個 List 並緩存結果。 您可以簡單地將下拉列表綁定到結果,並在需要時從緩存中檢索相同的列表。

public List<string> GetDatabaseList()
{
    List<string> list = new List<string>();

    // Open connection to the database
    string conString = "server=xeon;uid=sa;pwd=manager; database=northwind";

    using (SqlConnection con = new SqlConnection(conString))
    {
        con.Open();

        // Set up a command with the given query and associate
        // this with the current connection.
        using (SqlCommand cmd = new SqlCommand("SELECT name from sys.databases", con))
        {
            using (IDataReader dr = cmd.ExecuteReader())
            {
                while (dr.Read())
                {
                    list.Add(dr[0].ToString());
                }
            }
        }
    }
    return list;

}

首先添加以下程序集:

  • Microsoft.SqlServer.ConnectionInfo.dll
  • Microsoft.SqlServer.Management.Sdk.Sfc.dll
  • 微軟.SqlServer.Smo.dll

C:\\Program Files\\Microsoft SQL Server\\100\\SDK\\Assemblies\\

然后使用以下代碼:

var server = new Microsoft.SqlServer.Management.Smo.Server("Server name");

foreach (Database db in server.Databases) {
    cboDBs.Items.Add(db.Name);
}

您可以使用以下查詢之一:

  • EXEC sp_databases
  • SELECT * FROM sys.databases

嗶嘰

只需使用GetSchema方法:

using (SqlConnection connection = GetConnection())
{
    connection.Open();
    DataTable dtDatabases = connection.GetSchema("databases");

    //Get database name using dtDatabases["database_name"]
}
    using (var connection = new System.Data.SqlClient.SqlConnection("ConnectionString"))
    {
        connection.Open();
        var command = new System.Data.SqlClient.SqlCommand();
        command.Connection = connection;
        command.CommandType = CommandType.Text;
        command.CommandText = "SELECT name FROM master.sys.databases";

        var adapter = new System.Data.SqlClient.SqlDataAdapter(command);
        var dataset = new DataSet();
        adapter.Fill(dataset);
        DataTable dtDatabases = dataset.Tables[0];
    }
   How to get list of all database from sql server in a combobox using c# asp.net windows application  
     try
        {
            string Conn = "server=.;User Id=sa;" + "pwd=passs;";
            SqlConnection con = new SqlConnection(Conn);
            con.Open();

            SqlCommand cmd = new SqlCommand();
         //   da = new SqlDataAdapter("SELECT * FROM sys.database", con);
            cmd = new SqlCommand("SELECT name FROM sys.databases", con);
           // comboBox1.Items.Add(cmd);
            SqlDataReader dr;
            dr = cmd.ExecuteReader();
            if (dr.HasRows)
            {
                while (dr.Read())
                {
                    //comboBox2.Items.Add(dr[0]);
                    comboBox1.Items.Add(dr[0]);
                }
            }

           // .Items.Add(da);
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }

嘗試這個:

SqlConnection con = new SqlConnection(YourConnectionString);
SqlCommand cmd = new SqlCommand("SELECT name from sys.databases", con);
con.Open();
SqlDataReader dr = cmd.ExecuteReader();
while (dr.Read())
{
    cbSrc.Items.Add(dr[0].ToString());
}
con.Close();

或這個:

DataSet ds = new DataSet();
SqlDataAdapter sqlda = new SqlDataAdapter("SELECT name from sys.databases", YourConnectionString);
sqlda.Fill(ds);
for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
{
    cbSrc.Items.Add(ds.Tables[0].Rows[i][0].ToString());
}
   public static List<string> GetAllDatabaseNamesByServerName(string ServerName, [Optional] string UserID, [Optional] string Password)
    {
        logger.Debug("Start.");

        List<string> lstDatabaseNames = null;

        try
        {
            lstDatabaseNames = new List<string>();
            //string servername = System.Environment.MachineName;
            string newConnString = string.Format("Data Source={0};", ServerName);

            if (UserID == null)
            {
                newConnString += "Integrated Security = True;";
            }
            else
            {
                newConnString += string.Format("User Id ={0}; Password={1};", UserID, Password);
            }
            SqlConnection con = new SqlConnection(newConnString);
            con.Open();
            SqlCommand cmd = new SqlCommand("SELECT name FROM master.sys.databases", con);
            SqlDataAdapter da = new SqlDataAdapter(cmd);
            DataTable dt = new DataTable();
            da.Fill(dt);
            foreach (DataRow row in dt.Rows)
            {
                lstDatabaseNames.Add(row[0].ToString());
            }
            con.Close();
            return lstDatabaseNames;
        }
        finally
        {
        
            logger.Debug("Ends.");
        }
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM