数据表:restrictionValues和表名

时间:2018-08-08 09:50:16

标签: c# datatable oledb

使用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;
    }

1 个答案:

答案 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”无疑将获得常用表,而不是系统表或类似的表。

希望你的耳朵没事。