Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Schema 如何使用亚音速3.0动态获取表模式?_Schema_Subsonic_Subsonic3 - Fatal编程技术网

Schema 如何使用亚音速3.0动态获取表模式?

Schema 如何使用亚音速3.0动态获取表模式?,schema,subsonic,subsonic3,Schema,Subsonic,Subsonic3,我有一个页面,它在下拉列表中列出了一堆表格。我需要动态加载数据库中的列列表。在亚音速2.0中,它可以由亚音速.Schema.BuildTableSchema完成,但不确定如何在3.0中完成。我尝试使用下面的代码,但不起作用 SubSonic.Schema.DatabaseTable D = new SubSonic.Schema.DatabaseTable("Users", SubSonic.DataProviders.ProviderFactory.GetProvide

我有一个页面,它在下拉列表中列出了一堆表格。我需要动态加载数据库中的列列表。在亚音速2.0中,它可以由亚音速.Schema.BuildTableSchema完成,但不确定如何在3.0中完成。我尝试使用下面的代码,但不起作用

SubSonic.Schema.DatabaseTable D = new SubSonic.Schema.DatabaseTable("Users",    
        SubSonic.DataProviders.ProviderFactory.GetProvider("ApplicationConnectionString"));

    foreach (SubSonic.Schema.IColumn Column in D.Columns)
    {
      ListItem Item = new ListItem();

      if ((Column.Name ?? "").IndexOf("Email") != -1)
      {
        Item.Selected = true;
      }

      ddlEmailColumn.Items.Add(Item);
      ddlEmailColumn.SelectedValue = Column.Name;
    }

我认为没有人会回答这个问题,所以我使用以下sql查询艰难地完成了这项工作:

从信息_SCHEMA.columns中选择列_NAME,其中TABLE_NAME='TABLE_NAME'


从选择[id]中[id]所在的syscolumns中选择[name]来自sysobjects,其中[name]='Table_Name'和colid IN SELECT SIK.colid FROM sysindexkeys SIK JOIN sysobjects等SIK。[id]=SO。[id]其中SIK.indid=1和SO。[name]='Table_name'

我不能100%确定亚音速的语法差异,但我知道在2.2中我能够做到:

Array arr = MyTable.Schema.Columns.ToArray();

在亚音速3.0中,您不需要这样做。模式在编译时由T4宏捕获,并在运行时可用。您可以在Structs.tt生成的代码中找到它

粗略地说,代码是

foreach (var column in UsersTable.Columns) {
    // do stuff with column
}