C# 列举 服务器,数据库,表,字段等 SQL Server 2000 与 Access

C#


列举局域网内所有的SQL Server2000服务器,数据库,表

使用的对象:SQLDMO     (通过添加引用:COM,Microsoft SQLDMO Object Library 即可)

            SQLDMO.Application sqlApp = new SQLDMO.ApplicationClass();
            SQLDMO.NameList sqlServers = sqlApp.ListAvailableSQLServers();
            com_Sser.Items.Clear();
            for (int i = 1; i <= sqlServers.Count; i++)
            {
                object srv = sqlServers.Item(i);
                if (srv != null)
                {
                    this.com_Sser.Items.Add(srv);
                }
            }

 

列举服务器里的所有数据库              //通过检查master数据库里的sysdatabases表


            //构造连接字符串,列举数据库
            string constr = "Data Source=" + com_Sser.Items[com_Sser.SelectedIndex].ToString() + ";uid="
                + txt_JoinUid.Text + ";pwd=" + txt_JoinPwd.Text + ";Initial Catalog=master";

            string sqlstr = "select name from sysdatabases";
            SqlDataAdapter sqldap = new SqlDataAdapter(sqlstr, constr);
            DataSet ds = new DataSet();
            try
            {
                sqldap.Fill(ds,"DataBases");
                com_Sdb.DataSource = ds.Tables["DataBases"].DefaultView;
                com_Sdb.DisplayMember = "name";
            }
            catch
            {
                MessageBox.Show("连接有误");
                return;
            }


列举数据库里的所有表:


            string constr = "Data Source=" + com_Sser.Items[com_Sser.SelectedIndex].ToString() + ";uid="
                + txt_JoinUid.Text + ";pwd=" + txt_JoinPwd.Text + ";Initial Catalog=" +
                com_Sdb.Text;
            string sqlstr = "select name from sysobjects where xtype='U '";
            SqlDataAdapter sqldap = new SqlDataAdapter(sqlstr, constr);
            DataSet ds = new DataSet();
            try
            {
                sqldap.Fill(ds, "DataBases");
                com.DataSource = ds.Tables["DataBases"].DefaultView;
                com.DisplayMember = "name";
            }
            catch
            {
                MessageBox.Show("连接有误");
                return;
            }


列举表的所有字段.这个与Access的方式基本是一样的:

            string constr = "Data Source=" + com_Sser.Items[com_Sser.SelectedIndex].ToString() + ";uid="
                + txt_JoinUid.Text + ";pwd=" + txt_JoinPwd.Text + ";Initial Catalog=" +
                com_Sdb.Text;
            string sqlstr = "select * from " + comTab.Text;
            SqlDataAdapter sqldap = new SqlDataAdapter(sqlstr, constr);
            DataSet ds = new DataSet();
            try
            {
                sqldap.Fill(ds, "tab");
                com.Items.Clear();
                foreach (DataColumn datacol in ds.Tables["tab"].Columns)
                {
                    com.Items.Add(datacol.Caption);
                }
            }
            catch
            {
                MessageBox.Show("连接有误");
                return;
            }


Access:

打开Access:

            OpenFileDialog a = new OpenFileDialog();
            a.Filter = "Access 2003 *.mdb|*.mdb";//关于Filter:"acc *.mdb|*.mdb;*.*|bcc *.*|*.*"
            a.ShowDialog();
            if (File.Exists(a.FileName))
            {
                txt_Apath.Text = a.FileName;
            }

列举Access中的所有表

            string constr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + txt_Apath.Text +
            ";Jet OLEDB:DataBase Password=" + txt_JoinPwd.Text;
            DataTable dt = new DataTable();
            OleDbConnection oleConn = new OleDbConnection(constr);
            try
            {
                oleConn.Open();
                dt = oleConn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" });
                int iCount = dt.Rows.Count;
                com.Items.Clear();
                for (int i = 0; i < iCount; i++)
                {
                    com.Items.Add(dt.Rows[i]["Table_name"].ToString());//这些字符串的意义,我也不懂
                }
            }
            catch
            {
                MessageBox.Show("连接出错");
                oleConn.Close();
                return;
            }

posted @ 2008-04-05 16:39  以函  阅读(403)  评论(0编辑  收藏  举报