如何跨多个ODBC数据库执行相同的SQL查询,如MySQL,Oracle和SQL Server。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
namespace DataAccessLayer
public DataSet GetSourceTables()
{
string query = "Select DISTINCT(name) FROM sys.Tables";
DataSet ds = new DBHelper().ExecuteDataSet(query);
return ds;
}
我的目标是从不同的DSN中选择所有表名,如MySQL,Oracle等。
答案 0 :(得分:2)
通常,只有在简单查询时才能在各种数据库中使用相同的SQL查询。当您需要使用日期,日期时间,字符串函数等时,存在差异。
从您的查询中我看到您想要获取表名(数据库模式的一部分)。此查询是特定于供应商的。每个供应商都将模式信息保存在不同的表中,因此对于PostgreSQL,您必须查看information_schema.columns
,对于Oracle,user_tab_columns
和Informix使用systables
。您可以为每个数据库创建查询,然后逐个尝试,直到成功。但是大多数DB驱动程序都有发现数据库模式的过程/方法。在Java中有DatabaseMetaData.getTables()
,在ODBC中您可以使用SQLTables()
。对于C#,请查看:Retrieving table schema information using C#