代码之家  ›  专栏  ›  技术社区  ›  Transformer

如何获取用户定义的表

  •  1
  • Transformer  · 技术社区  · 7 年前

    here ,但他们没有获取用户的信息 ,我想查询和

    1. 回去,
    2. 根据某些条件取回表格,例如 tenantId 上校

      public static List<string> GetUserCreatedTables(string connectionString = null)
      {
          if (string.IsNullOrEmpty(connectionString))
              connectionString = Settings.Default.ConnectionString;
          using (SqlConnection connection = new SqlConnection(connectionString))
          {
              connection.Open();
              DataTable schema = connection.GetSchema("Tables");
              List<string> TableNames = new List<string>();
              foreach (DataRow row in schema.Rows)
              {
                  TableNames.Add(row[2].ToString().Trim());
              }
              return TableNames;
          }
      }
      

    我很熟悉这种方法,可以直接查询。 SELECT Name from Sysobjects where xtype = 'u' ,但我希望采用前面的方法,以便可以重用它来查询其他人。

    2 回复  |  直到 7 年前
        1
  •  1
  •   Philip Cullen    7 年前

    如果你通过了 结构类型成员 桌子 GetSchema()

    要获取筛选列表,可以将限制传递给 GetSchema() . 限制 结构类型成员 目录 , 所有者 , GetSchema()

    获取列为的用户定义表 租户ID GetSchema()

    connection.GetSchema("StructuredTypeMembers", (new[] { null, null, null, "tenantId"}));
    
        2
  •  1
  •   userfl89    7 年前

    你可以用 SMO IsSystemObject Contains Columns 可用于检查列名。参考文献 Microsoft.SqlServer.ConnectionInfo Microsoft.SqlServer.SMO 将需要使用 Microsoft.SqlServer.Management.Smo 引用了命名空间。要查看视图,请更改 Table 反对 View foreach 循环。

    using Microsoft.SqlServer.Management.Smo;
    
                Server serv = new Server(@"YourServer");
    
                //for Windows authentication
                serv.ConnectionContext.LoginSecure = true;
                serv.ConnectionContext.StatementTimeout = 600;
                Database db = serv.Databases["YourDatabase"];
    
                List<string> TableNames = new List<string>();
    
                foreach (Table t in db.Tables)
                {
                    //check for system objects
                    if (!t.IsSystemObject && t.Columns.Contains("tenantId"))
                    {
                        //use the Name property to return the table name
                        TableNames.Add(t.Name);
                    }
                }