取得表名,列名,列的字段类型.....

解决方案 »

  1.   

    SqlConnection m_Scon = new SqlConnection();
    m_Scon.ConnectionString =StrConn;
    SqlCommand m_Scmd = new SqlCommand("sp_columns",m_Scon);
    m_Scmd.CommandType = CommandType.StoredProcedure;
    SqlParameter myParm = m_Scmd.Parameters.Add("@table_name",SqlDbType.VarChar,100);
    myParm.Value = tree_Db.SelectedNode.Text;
    m_Scon.Open();
    SqlDataReader m_Sdr = m_Scmd.ExecuteReader();
      

  2.   

    SqlDataAdapter.SelectCommand.CommandText = "select name from sysobjects ";
    SqlDataAdapter.SelectCommand.CommandText = "select name from syscolumns where id = (select id from sysobjects where name = 表名";
      

  3.   

    使用SQLDMO从SQL Server中获取信息 
    ms sql server提供了一个非常方便的COM组件“SQLDMO”来帮助我们获取和管理SQL Server。在这里提供一些想法和实现。
    系统要求:
    windows2000server
    vs.net rc3
    sql server 2000
    1.在.NET中使用sqldmo.dll
    path :>tlbimp sqldmo.dll /out : rc3sqldmo.dll
    创建一个新的C#项目(winform, library....),添加引用,选择Browse,找到rc3sqldmo.dll,加入。
    2.查看rc3sqldmo.dll的结构
    打开object view,选择rc3sqldmo,你能浏览所有的属性、方法和事件的定义。
    3.使用rc3sqldmo
        获得连接:
                rc3sqldmo.sqlserver2 mysqlsvr = new rc3sqldmo.sqlserver2class();
    mysqlsvr .connect("sqlservername","uid","pws");    获得数据库信息:rc3sqldmo.databases mydbs=mysqlsvr.databases;
    rc3sqldmo.database2 mydb =new rc3sqldmo.database2class();
    mydb=mydbs.item("dbname","owner"); 或mydb=mysqlsvr.databases.item("dbname","owner");   获得表和字段的信息:rc3sqldmo.Tables mytbls= mysqlsvr.databases.item("dbname","owner").tables;
    rc3sqldmo.table2 mytbl = new rc3sqldmo.table2class();
    mytbl = mytbls.item("tablename","owner");或
    mytbl = mysqlsvr.databases.item("dbname","owner").tables.item("tablename","owner");
    string[3] mylist = new string[3];
    rc3sqldmo.column2 myfield = new rc3sqldmo.column2class();
    foreach(object o in mytbl.columns)
    {   
            myfield = (rc3sqldmo.column2) o;
            mylist[0]=myfield.name;
           mylist[1] = myfield.datatype;
          mylist[2] =myfield.length.tostring();
    } 获得存储过程的信息::
    rc3sqldmo.storedprecudure2 mysp = new rc3sqldmo.storedprecudure2class();
    mysp =mysqlsvr.batabase.itrm("dbname",owner).storedprecudures.item[B("spname",owner)]用途的讨论::动态管理sql server
    动态获得table,storedprecudure的结构信息
    还能增加,修改所有sql server object的内容。需要安装sql server sp3
     
     
      

  4.   

    我们曾经在以前的应用中多次需要得到SQL Server的详细信息,过去,我们必须使用API和效率低下的ADO的 调用才能得到,现在,我们有了一个新的方法,就是SQLDMO(SQL Distributed Management Objects,SQL分布式管 理对象),尽管它目前还不被人所知和使用,但是SQLDMO提供了许多强有力的、和利用代码从SQL Server获得 信息相类似的许多功能,为举例方便,这里仅向您解释如何得到本地网络的SQL Server列表,如何去连接每 个SQL Server,以及如何得到Server中的表、存储过程和视图的列表。SQLDMO对象来自SQLDMO.dll,SQLDMO.dll是随SQL Server2000一起发布的。SQLDMO.dll自身是一个COM对象,因此 ,在你的.NET项目里必须先引用它,VS.NET集成开发环境会创建所有必要的对COM的封装。注意:如果你使用“ using SQLDMO;”语句来引用的话,你将会得到一个错误信息。引用了COM对象之后,你就可以很容易地使用它了。 本例子中的所有操作都使用以下的一个或几个对象: 
    SQLDMO.Application 
    SQLDMO.SQLServer 
    SQLDMO.Database 
    SQLDMO.NameList象数据备份和恢复这样的操作都有许多对象可以使用,但作为例子,我们会尽量简单,使你轻松进 入SQLDMO的世界来浏览一下它的方便性。 列出本地网络中可使用的SQL服务器相对来说比较简单,首先,你需要引用SQLDMO.Application对象,其 次,你必须建立一个SQLDMO.Application.ListAvailableSQLServers()方法的返回值的实 例SQLDMO.NameList,SQLDMO.NameList是服务器名字的COM集合。 请记住:在你习惯了调用COM对象之前,调用COM对象总是令人感到可怕的,但习惯了就会好的。下面 是一些示例代码,它利用本地可使用的SQL服务器的列表来填充下拉列表框。 
    //得到所有本地网络中可使用的SQL服务器列表。
    SQLDMO.Application sqlApp = new SQLDMO.ApplicationClass(); 
    SQLDMO.NameList sqlServers = sqlApp.ListAvailableSQLServers(); 
    for(int i=0;i<sqlServers.Count;i++) 

        object srv = sqlServers.Item(i + 1); 
        if(srv != null) 
        { 
            this.cboServers.Items.Add(srv);                         
        } 

    if(this.cboServers.Items.Count > 0) 
        this.cboServers.SelectedIndex = 0; 
    else 
        this.cboServers.Text = "<No available SQL Servers>"; 正如前面所讲的,是不是很简单?请记住:COM集合的第一个项目是1,而不是0。 连接数据库并得到所有数据库的列表也是相当简单的。下面的代码采用上面下拉列表框所选择的SQL服 务器,并连接该服务器(使用文本框输入的用户名和密码),生成该服务器上数据库列表的下拉列表框。  //得到指定SQL服务器所有数据库的列表
    SQLDMO.Application sqlApp = new SQLDMO.ApplicationClass(); 
    SQLDMO.SQLServer srv = new SQLDMO.SQLServerClass();                 
    srv.Connect(this.cboServers.SelectedItem.ToString(),this.txtUser.Text,this.txtPassword.Text); 
    foreach(SQLDMO.Database db in srv.Databases) 

        if(db.Name!=null) 
            this.cboDatabase.Items.Add(db.Name); 
    }要得到该库中对象的列表也是轻而易举的事,再一次连接到数据库,就可以遍历出对象的集合。  //得到所有的存储过程,所有的表放到Tables集合,所以的视图放到Views集合
    SQLDMO.SQLServer srv = new SQLDMO.SQLServerClass();                 
    srv.Connect(this.cboServers.SelectedItem.ToString(),this.txtUser.Text,this.txtPassword.Text); 
    for(int i=0;i<srv.Databases.Count;i++) 

        if(srv.Databases.Item(i+1,"dbo").Name == this.cboDatabase.SelectedItem.ToString()) 
        { 
            SQLDMO._Database db= srv.Databases.Item(i+1,"dbo"); 
            this.lstObjects.Items.Clear(); 
            for(int j=0;j<db.StoredProcedures.Count;j++) 
            { 
                this.lstObjects.Items.Add(db.StoredProcedures.Item(j+1,"dbo").Name); 
            } 
            break; 
        } 
    }要给sql server打sp3补丁
      

  5.   

    仅仅是获取SQLSERVER中的表名,列名,列的字段类型不用存储过程这么复杂吧,SQL语句就搞定了
    系统表中有个sysobjects表,查询一下,你会发现里面记录的都是表的相关信息,比如一个表”UserinfoTab”,同时,通过xtype你可以判断对象类型是系统表、用户表、主键信息,这个自己去研究吧在sysobjects中对应的记录发现后,记下其id字段信息。然后,以这个ID为关键字做查询 select * from syscolumns where id='“+ID+“',然后出来的信息就是所有字段信息了,其中xtype是字段的数据类型。类型太多,我就懒得贴出来了