读取数据库中的值(获取数据库)

读取数据库中的值(获取数据库),第1张

大致流程

如果是纯JSP技术的话:

1、创建model类,对应表a的表元(每个model类的对象对应表a的一行,model类的属性对应表a的字段)

2、创建取表a数据的类( *** 作A表的类):类中有取表A所有数据的方法如:publicList();//实现取数据即将a表的每行包装成一个model类对象,然后添加到一个List中,返回该List

3、JSP页面中引入 *** 作a表的类;然后创建其一个 *** 作对象;调用方法得到包含所有数据的List。

4、JSP中用for循环输出List中的内容结合HTML实现显示。

在很多情况下我们需要将指定的数据库中的所有表都列出来 在使用c#进行软件开发时 我们有哪些方法可是实现这个目的呢?本人对此进行概要的总结 有以下 中方式可以实现这个目的

1 sqldmo

SQLDMO是 *** 作SQLServer的理想的方式 如果您的数据库是SQLServer就可以考虑使用这种方式 在C#中使用SQLDMO需要添加SQLDMO的引用 然后在当前的文件中using SQLDMO;即可以使用SQLDMO SQLDMO的对象模型大家可以在SQLServer的帮助中获得

private void GetTabels_DMO(string strServerName string strUser string strPWD string strDatabase)

{

SQLDMO SQLServer Server = new SQLDMO SQLServerClass();

//连接到服务器

Server Connect(strServerName strUser strPWD);

//对所有的数据库遍历 获得指定数据库

for(int i= ;i<Server Databases Count;i++)

{

//判断当前数据库是否是指定数据库

if(Server Databases Item(i+ dbo ) Name ==strDatabase)

{

//获得指定数据库

SQLDMO _Database db= Server Databases Item(i+ dbo );

//获得指定数据库中的所有表

for(int j= ;j<db Tables Count;j++)

{

MessageBox Show(db Tables Item(j+ dbo ) Name);

}

}

}

}

2 adox

adox是ado Extensions for DDL and Security 是微软对ADO技术的扩展 使用它我们可以 *** 作数据库的结构 它是一个组件 估计以后在ADO NET中会增加ADOX的一些功能 如果大家需要ADOX的一些资料 我可以提供 下面的一个例子就是使用ADOX来获得当前数据库的所有表

private void GetTables_ADOX()

{

//ADO的数据库连接

ADODB ConnectionClass cn=new ADODB ConnectionClass();

string ConnectionString= Provider=SQLOLEDB ;Integrated Security=SSPI;Initial Catalog=Test;Data Source=HBXP ;

cn Open(ConnectionString sa );

// *** 作ADOX的Catalog对象

CatalogClass cat=new CatalogClass();

cat ActiveConnection=cn;

for(int i= ;i<cat Tables Count;i++)

{

MessageBox Show(cat Tables[i] Name);

}

}

注意 在上面的代码中cat ActiveConnection不能是ADO Net中的Connection 而应该是ADO的Connection

3 中的oledbconnection

在c#中我们首先会考虑使用来解决问题 如果没有方法才会考虑使用adox或者sqldmo来解决这个问题 虽然adox和sqldmo也能够解决这个问题 但是他们毕竟是组件 中使用起来和在平台会有一些差异 不是很顺手 下面的示例就显示了在中的oledbconnection的方法getoledbschematable来获得数据库的架构 大家可以在msdn中看到这个方法的说明

public DataTable GetOleDbSchemaTable(

Guid schema

object[] restrictions);

参数

schema

OleDbSchemaGuid 的值之一 它指定要返回的架构表

restrictions

限制值的 Object 数组 这些值按照限制列的顺序来应用 即 第一个限制值应用于第一个限制列 第二个限制值应用于第二个限制列 依此类推

返回值

包含请求的架构信息的 DataTable

更多的信息大家可以查询MSDN 下面将示例如何实现

private void GetTables_ADONET()

{

//处理OleDbConnection

string mailto:strConnectionString=@% Integrated Security=SSPI;Data Source=HBXP;Initial Catalog=Test;Provider=SQLOLEDB ;

OleDbConnection cn=new OleDbConnection(strConnectionString);

cn Open();

//利用OleDbConnection的GetOleDbSchemaTable来获得数据库的结构

DataTable dt = cn GetOleDbSchemaTable(OleDbSchemaGuid Tables new object[] {null null null TABLE });

foreach (DataRow dr in  dt Rows)

{

MessageBox Show((String)dr[ TABLE_NAME ]);

}

}

4 信息架构视图

信息架构视图是sql 标准中定义的架构视图 这些视图独立于系统表 信息架构视图的最大优点是 即使我们对系统表进行了重要的修改 应用程序也可以正常地使用这些视图进行访问 下面的示例使用信息架构视图来工作

private void GetTables_INFORMATION_SCHEMA()

{

//打开连接

string strConnectionString=System Configuration ConfigurationSettings AppSettings[ ConnectionString ];

sqlcn=new SqlConnection(strConnectionString);

sqlcn Open();

//使用信息架构视图

SqlCommand sqlcmd=new SqlCommand( SELECT TABLE_NAME FROM INFORMATION_SCHEMA TABLES WHERE TABLE_TYPE = BASE TABLE sqlcn);

SqlDataReader dr=sqlcmd ExecuteReader();

while(dr Read())

{

MessageBox Show(dr GetString( ));

}

}

5 使用系统表

如果您的数据库系统是sqlserver 就可以使用如下的方式来获得当前数据库的所有表

private void GetTables_SystemTable()

{

//打开连接

string strConnectionString=System Configuration ConfigurationSettings AppSettings[ ConnectionString ];

sqlcn=new SqlConnection(strConnectionString);

sqlcn Open();

//使用信息架构视图

SqlCommand sqlcmd=new SqlCommand( SELECT OBJECT_NAME (id) FROM sysobjects WHERE xtype = U AND OBJECTPROPERTY (id IsMSShipped ) = sqlcn);

SqlDataReader dr=sqlcmd ExecuteReader();

while(dr Read())

{

MessageBox Show(dr GetString( ));

}

}

使用sqlserver的存储过程 sp_tables

下面是 盛国军 朋友提出的使用存储过程的方法的补充代码

public void GetTables_StoredProcedure()

{

//处理OleDbConnection

string mailto:strConnectionString=@% Integrated Security=SSPI;Data Source=HBXP;Initial Catalog=Test;Provider=SQLOLEDB ;

OleDbConnection cn=new OleDbConnection(strConnectionString);

cn Open();

//执行存储过程

OleDbCommand cmd=new OleDbCommand( sp_tables cn);

cmd CommandType=CommandType StoredProcedure;

OleDbDataReader dr=cmd ExecuteReader();

while(dr Read())

{

MessageBox Show(dr[ TABLE_NAME ] ToString());

}

lishixinzhi/Article/program/net/201311/13176

TABLE 语句

具体语法:TABLE table_name [ORDER BY column_name] [LIMIT number [OFFSET number]]

其实从语法上看,可以排序,也可以过滤记录集,不过比较简单,没有 SELECT 那么强大。

示例 1

简单的建一张很小的表 y1,记录数为 10 条。表 t1,插入 10 条记录

mysql-(ytt/3305)->create table t1 (r1 int,r2 int);

Query OK, 0 rows affected (002 sec)

mysql-(ytt/3305)->insert into t1

with recursive aa(a,b) as (

select 1,1

union all

select a+1,ceil(rand()20) from aa where a < 10

) select from aa;

Query OK, 10 rows affected (000 sec)

Records: 10  Duplicates: 0  Warnings: 0

简单全表扫描mysql-(ytt/3305)->select from t1;+------+------+| r1   | r2   |+------+------+|    1 |    1 ||    2 |    9 ||    3 |    9 ||    4 |   17 ||    5 |   17 ||    6 |   16 ||    7 |    6 ||    8 |    1 ||    9 |   10 ||   10 |    3 |+------+------+10 rows in set (000 sec)

TABLE 结果mysql-(ytt/3305)->table t1;+------+------+| r1   | r2   |+------+------+|    1 |    1 ||    2 |    9 ||    3 |    9 ||    4 |   17 ||    5 |   17 ||    6 |   16 ||    7 |    6 ||    8 |    1 ||    9 |   10 ||   10 |    3 |+------+------+10 rows in set (000 sec)

看下 table 的执行计划mysql-(ytt/3305)->explain table t1 order by r1 limit 2\G 1 row           id: 1  select_type: SIMPLE        table: t1   partitions: NULL         type: ALLpossible_keys: NULL          key: NULL      key_len: NULL          ref: NULL         rows: 10     filtered: 10000        Extra: Using filesort1 row in set, 1 warning (000 sec)

其实可以看到 TABLE 内部被 MySQL 转换为 SELECT 了。mysql-(ytt/3305)->show warnings\G 1 row  Level: Note   Code: 1003Message: / select#1 / select `ytt``t1``r1` AS `r1`,`ytt``t1``r2` AS `r2` from `ytt``t1` order by `ytt``t1``r1` limit 21 row in set (000 sec)

那其实从上面简单的例子可以看到 TABLE 在内部被转成了普通的 SELECT 来处理。示例 2应用于子查询里的子表。这里要注意,内表的字段数量必须和外表过滤的字段数量一致。克隆表 t1 结构mysql-(ytt/3305)->create table t2 like t1;Query OK, 0 rows affected (002 sec)

克隆表 t1 数据mysql-(ytt/3305)->insert into t2 table t1;Query OK, 10 rows affected (000 sec)Records: 10  Duplicates: 0  Warnings: 0

table t1 被当做内表,表 t1 有两个字段,必须同时满足 t2 检索时过滤的字段也是两个。mysql-(ytt/3305)->select from t2 where (r1,r2) in (table t1);+------+------+| r1   | r2   |+------+------+|    1 |    1 ||    2 |    9 ||    3 |    9 ||    4 |   17 ||    5 |   17 ||    6 |   16 ||    7 |    6 ||    8 |    1 ||    9 |   10 ||   10 |    3 |+------+------+10 rows in set (000 sec)

注意:这里如果过滤的字段数量和子表数量不一致,则会报错。

以上就是关于读取数据库中的值(获取数据库)全部的内容,包括:读取数据库中的值(获取数据库)、c#获取数据库中所有表名称的方法、怎样用SQL语句查询一个数据库中的所有表等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9459345.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-28
下一篇 2023-04-28

发表评论

登录后才能评论

评论列表(0条)

保存