我已经创建了一个实用程序方法来从db表中获取模式。在这种情况下,Oracle 11 db。
public static DataTable GetColumnsSchemaTable(DbConnection cnctn, string tableName)
{
DataTable schemaTable;
string[] restrictions = new string[3] { null, tableName, null };
schemaTable = cnctn.GetSchema("Columns", restrictions);
/* table name is case sensitive and in XXXX db table names are UPPER */
if (schemaTable.Rows.Count == 0)
{
restrictions = new string[3] { null, tableName.ToUpper(), null };
schemaTable = cnctn.GetSchema("Columns", restrictions);
}
return schemaTable;
}
使用System.Data.OracleClient提供程序工厂创建cnctn时,此方法正常。当使用System.Data.OleDb提供程序工厂创建它时,表没有行。我有另一个实用工具方法来获取连接字符串:
public static string GetDbConnectionString(DbConnection cnnctn, string provider, string server, string dbName, string user, string pwd)
{
if (cnnctn is OleDbConnection)
{
string usedProvider;
if (provider == null)
usedProvider = "msdaora";
else
usedProvider = provider;
return string.Format("Provider={0};Data Source={1};User Id={2};Password={3};",
usedProvider, dbName, user, pwd);
}
else if (cnnctn is System.Data.OracleClient.OracleConnection)
{
return string.Format("Data Source={0};User Id={1};Password={2};",
dbName, user, pwd);
}
else if (cnnctn is Oracle.DataAccess.Client.OracleConnection)
{
return string.Format("Data Source={0};User Id={1};Password={2};",
dbName, user, pwd);
}
else if (cnnctn is SqlConnection)
{
return string.Format("Data Source={0}; Initial Catalog={1}; User Id={2}; Password={3};",
server, dbName, user, pwd);
}
return string.Empty;
}
并且数据库连接正常工作(我在尝试获取架构之前删除了行)。所有帮助将不胜感激。
谢谢&最诚挚的问候 - 马蒂
答案 0 :(得分:3)
确定。我整理出来了。我很久以前制作这段代码只是为了现在已经弃用的OracleClient并且留下了使用其他连接/提供者工厂的可能性。我不记得这些限制因连接而异。所以正确的用法是:
string[] restrictions = new string[4] { null, null, tableName, null };
用于OleDbConnection。