急!!!vb.net怎样列出SQL数据库中所有表及表字段

breezes2008 2009-07-11 12:16:40
已知数据库名字,例如pubs,列出pubs下所有的表名和相应表中所有的字段名,然后生成一颗树型,方便查看。
我是一个新手,在此先感谢大家!


...全文
350 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
qshurufa 2009-07-12
  • 打赏
  • 举报
回复
留个脚印!!
oec2003 2009-07-12
  • 打赏
  • 举报
回复


select
sys.tables.name as TableName,--表名
sys.columns.name as ColumnName --字段名
from
sys.columns, sys.tables
where
sys.columns.object_id = sys.tables.object_id
and
sys.tables.name in (select name from sysobjects where xtype='u' )

  • 打赏
  • 举报
回复
以上可以 列出 数据库
选择库 列出表
选择表 列出列 Dim clSql As String = "SELECT [Name],[xtype],[length] FROM SysColumns 。。。。。。。这 下 面是获取列
  • 打赏
  • 举报
回复
刚好,我前两天为了学习vb自己写了个
Imports System.Collections.Generic
Imports System.Net
Imports System.Net.Sockets
Imports System.Net.Sockets.Socket
Imports System.Collections.Specialized
Imports System.Data.SqlClient

Public Class DBSqlServer
Private sqlCon As SqlConnection = Nothing

Public Function GetServers() As Dictionary(Of String, String)
Dim servers As New Dictionary(Of String, String)
'获取所有服务器
Try
Dim sqlApp As New SQLDMO.ApplicationClass '引用Interop.SQLDMO类
Dim sqlServers As SQLDMO.NameList '定义服务器列表
Dim SqlSrv As New SQLDMO.SQLServerClass '定义数据库列表
sqlServers = sqlApp.ListAvailableSQLServers '获得局域网内的可用SQL服务器列表
Dim i As Integer
For i = 0 To sqlServers.Count - 1
servers.Add(sqlServers.Item(i + 1), sqlServers.Item(i + 1))
Next
Catch ex As Exception
'MessageBox.Show(ex.Message)
End Try
Return servers
End Function

Public Function Getdbs(ByVal dbServer As String, ByVal dbUser As String, ByVal dbPass As String) As Dictionary(Of String, String)
Dim dbNames As New Dictionary(Of String, String)
'获取所有数据库
Try
Dim sqlApp As New SQLDMO.ApplicationClass '引用Interop.SQLDMO类
Dim sqlServers As SQLDMO.NameList '定义服务器列表
Dim SqlSrv As New SQLDMO.SQLServerClass '定义数据库列表

Dim SqlDB As New SQLDMO.Database '获得数据库列表
SqlSrv.Connect(dbServer, dbUser, dbPass)
For Each SqlDB In SqlSrv.Databases
dbNames.Add(SqlDB.Name, SqlDB.Name)
Next
Catch ex As Exception
'MessageBox.Show(ex.Message)
End Try
Return dbNames
End Function

Public Function GetTables(ByVal dbSever As String, ByVal dbName As String, ByVal dbUser As String, ByVal dbPass As String) As Dictionary(Of String, dbTable)
'获取所有表
Dim tables As New Dictionary(Of String, dbTable)
Dim strConnection = "data source=" & dbSever & ";initial catalog=" & dbName & ";user id=" & dbUser & ";pwd=" & dbPass
Try
If sqlCon Is Nothing Then
Try
sqlCon = New SqlConnection(strConnection)
sqlCon.Open()
Catch e As Exception
MsgBox(e.Message)
End Try
End If

If sqlCon.State = ConnectionState.Open Then

Dim tbSql As String = "SELECT Name FROM " & dbName & "..SysObjects Where XType='U' ORDER BY Name"
Dim tbDS As DataSet = New DataSet
Dim tbDA As SqlDataAdapter = New SqlDataAdapter(tbSql, sqlCon)
tbDA.Fill(tbDS)
For Each r As DataRow In tbDS.Tables(0).Rows
Dim tb As New dbTable
tb.Name = r(0)
Dim clSql As String = "SELECT [Name],[xtype],[length] FROM SysColumns WHERE id=Object_Id('" & r(0) & "')"
Dim clDS As DataSet = New DataSet
Dim clDA As SqlDataAdapter = New SqlDataAdapter(clSql, sqlCon)
clDA.Fill(clDS)
For Each r1 As DataRow In clDS.Tables(0).Rows
Dim cln As New Column
cln.Name = r1("Name")
cln.Type = r1("xtype")
cln.Length = r1(2)
tb.Columns.Add(cln.Name, cln)
Next
tables.Add(tb.Name, tb)
Next

End If
Catch ex As Exception
' MessageBox.Show(ex.Message)
End Try
Return tables
End Function
jane_zhao 2009-07-11
  • 打赏
  • 举报
回复
用这个sql查询出所有表名和字段名:
select c.name as tableName ,a.name as columName from syscolumns a
inner join sysobjects c ON
a.id=c.id AND c.xtype='U' AND c.name<>'dtproperties'
where c.name in (select name from sysobjects where xtype='u' )
order by c.name
然后将这些数据循环添加到treeview上。
a854468521 2009-07-11
  • 打赏
  • 举报
回复
使用 System.Data.Common.DbConnection.GetSchema 类获得数据库的架构信息。
lsh2216024 2009-07-11
  • 打赏
  • 举报
回复
路過
wuyq11 2009-07-11
  • 打赏
  • 举报
回复
SELECT b.name '表名',a.colorder '序号',a.name '字段名',c.name '类型',a.length '长度',a.isnullable '空值',
a.cdefault '默认值' FROM syscolumns a,sysobjects b,systypes c WHERE a.id=b.id and b.xtype='u'
and a.xtype=c.xtype order by b.name,a.colorder

取表名
SELECT distinct(b.name) '表名' FROM syscolumns a,sysobjects b,systypes c WHERE a.id=b.id and b.xtype='u'
and a.xtype=c.xtype order by b.name
vb/c#.net实体代码生成工具(entityscodegenerate)【ecg】是一款专门为vb/c#.net数据库程序开发量身定做的(orm框架)代码生成工具,所生成的代码基于oo、ado.net、分层架构、orm,改进的抽象工厂设计模式及反射机制等。目前直接支持oracle、sqlserver、sybase、db2、access、mysqlsqlite、postgresql、dm(达梦)、oledb和custom(自定义)类型的数据库、powerdesigner文件,同时也支持informix、firebird、maxdb、odbc等,可用于各种数据库,并支持自定义分页查询(skip/take)。从数据库生成表对应的vb/c#实体代码,并提取表及字段的注释等信息,亦可对生成的实体数据类型进行各种自定义的设置和方便的数据库操作等。如数据库列和vb/c#代码类型的映射、实体命名空间、代码个性化注释、是否生成对应的数据库操作等,操作简单实用。同时通过实体可快速实现数据库表的增删改查等操作,另外,所生成的操作数据库的代码,只需按生成的配置文件说明修改数据库连接,即可用于各种类型数据库的访问操作等,对应文件会自动解析,即一次生成可用于各种类型的数据库的操作;且当表字段发生重大变化时再生成一次即可。所有数据库的操作默认以实体对应表的主键(可以是联合主键)为准,当然也可指定条件。增加和更新合并为一个保存操作,由实体自己判断是增加还是更新,若你愿意也可以分开来做,实体也提供了对应的快捷方式等。更多的好处在你用过之后才会发现。工具同时提供帮助文档和大量的示例源码(如ecg.demo等),用vs2005打开每个demo文件解决方案文件(.sln)即可看到源代码,一些示例以对应数据库自带的示例库为例介绍的(如oracle)。详见安装后文件和工具帮助.

16,722

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧