使用OleDb有一个功能:
我认为也许可以使用列表来查找特定表是否存在,例如: Check for MS Access database table if not exist create it
但是我也想了解给出的旧代码,以学习一些东西。
问题:
1)在下面的示例代码中,确切的strictionValues是什么意思? (未解决)
2)为什么所有单元格的row.ItemArray [2]都包含表名? (已解决)
3)是否有更好的方法从数据库中获取表名? (已解决)
这是我得到的代码:
public List<string> GetTableNames(string tableName, string[] field_names)
{
List<string> retTableNames = new List<string>();
if (dbConnection != null)
{
dbConnection.Open();
string strSQL = "SELECT * ";
string[] restrictionValues = new string[4] { null, null, null, "TABLE" };
OleDbCommand cmd = new OleDbCommand(strSQL, dbConnection);
try
{
/*search after all possible tables in dataset*/
DataTable schemaInformation = dbConnection.GetSchema("Tables", restrictionValues);
foreach (DataRow row in schemaInformation.Rows)
{
retTableNames.Add(row.ItemArray[2].ToString());
}
}
catch
{
retTableNames = null;
}
}
return retTableNames;
}
答案 0 :(得分:0)
(我刚刚注意到您说您已经获得了第一部分,但是无论如何我都会把它保留下来。有关“ TABLE”的内容,下面还有更多内容。)
关于限制的一些解释在@jdweng提供的link中的主程序中。
// You can specify the Catalog, Schema, Table Name, Table Type to get
// the specified table(s).
// You can use four restrictions for Table, so you should create a 4 members array.
String[] tableRestrictions = new String[4];
// For the array, 0-member represents Catalog; 1-member represents Schema;
// 2-member represents Table Name; 3-member represents Table Type.
// Now we specify the Table Name of the table what we want to get schema information.
tableRestrictions[2] = "Course";
DataTable courseTableSchemaTable = conn.GetSchema("Tables", tableRestrictions);
其余的解释是您正在使用的GetSchema:GetSchema Method (String, String[])的重载。
逐字记录:
为了在给定的限制上设置值,而不设置其他限制的值,您需要将前面的限制设置为null,然后为要为其指定值的限制输入适当的值。
“表”集合就是一个例子。如果“表”集合具有三个限制(数据库,所有者和表名),并且您只想获取与所有者“卡尔”关联的表,则需要传递以下值:null,“卡尔”。如果未传递限制值,则将默认值用于该限制。这与传递null相同,这与传递参数值的空字符串不同。在这种情况下,空字符串(“”)被视为指定参数的值。
有关架构限制的more complete article。
您似乎可以省略一些参数,因此上面的示例仅列出了3个限制。
我一直在寻找“ TABLE”参数的说明,但是很难找到。它是获取所有表的默认值,或者被忽略,或其他原因。获取所有表types
的最简单方法可能是做一个基本的DataTable table = connection.GetSchema("Tables");
然后获取每个表的类型以查看选项是什么。否则,坚持使用“ TABLE”无疑将获得常用表,而不是系统表或类似的表。
希望你的耳朵没事。