0

asp.NETDynamicSiteで独自のメタデータを構成するための情報を検索しています。

例えば。以下に示す構造のテーブルがMSSQLServerにあります。

CREATE TABLE [dbo].[someTable](
    [id] [int] NOT NULL,
    [pname] [nvarchar](20) NULL,
    [FullName] [nvarchar](50) NULL,
    [age] [int] NULL)

そして私は2つのMsSqlテーブル(私が作成した)、sysTablesとsysColumnsがあります。

sysTables:

ID sysTableName TableName TableDescription

1 | someTable |Persons|システム内のPersonsに関するすべてのデータ

sysColumns:

ID TableName sysColumnName ColumnName ColumnDesc ColumnType MUnit

1 | someTable | sometable_pname | 名前| ペルソナ名(例:ジョン)| nvarchar(20)| null
2 | someTable | sometable_Fullname | フルネーム| ペルソナ名(例:ジョンブラック)| nvarchar(50)| null
3 | someTable | sometable_age | 年齢| 人の年齢| int | ヌル

詳細/編集/挿入/リスト/リストの詳細ページで、メタデータsysColumnsおよびsysTableDataとして使用する必要があります。なぜなら、例えば。DetailsPage fullNameでは、フルネームとしては美しくありません。

someIdea、それは可能ですか?

ありがとう

更新::リストページでsysTables(メタデータテーブル)からのデータを表示するように変更しました<h2 class="DDSubHeader"><%= tableName%></h2>

public string tableName;
protected void Page_Init(object sender, EventArgs e)
{

            table = DynamicDataRouteHandler.GetRequestMetaTable(Context);
            //added by me
            uqsikDataContext sd=new uqsikDataContext();
            tableName = sd.sysTables.Where(n => n.sysTableName == table.DisplayName).FirstOrDefault().TableName;
            //end

            GridView1.SetMetaTable(table, table.GetColumnValuesFromRoute(Context));
            GridDataSource.EntityTypeName = table.EntityType.AssemblyQualifiedName;
            if (table.EntityType != table.RootEntityType)
            {
                GridQueryExtender.Expressions.Add(new OfTypeExpression(table.EntityType));
            }
 }

では、sysColumsはどうですか?sysColumnsテーブルからデータを取得するにはどうすればよいですか?

4

2 に答える 2

0

一言で言えば、はい、それは可能です。しかし、これは良い考えではないと思います。あなたが本当に話しているのは、プレゼンテーションデータをデータベースに保存することです。これを配置するのに本当に最適な場所は、aspxページ自体です。そうは言っても、データディクショナリタイプの情報をDBに格納する場合は、MS SQL Serverに組み込まれている、、、およびビューを利用し、表示名とを格納するために呼び出されるテーブルを追加することをsys.tablessys.columns勧め します。タイプ。sys.typesObjectDescriptions

create table ObjectDescriptions (
   object_id int not null,
   column_id null, --leave this column null if the record describes the table itself
   ObjectDisplayName nvarchar(20),
   ObjectDescription nvarchar(200)
 );

次に、オブジェクトIDに基づいてビューを作成して、テーブルのメタデータを取得し、asp.netを直接バインドするか動的に入力しますFormView

create view TableData as     
select 
     t.name as table_name
    ,td.ObjectDisplayName as table_display_name
    ,td.ObjectDescription as table_description
    ,c.name as column_name
    ,cd.ObjectDisplayName as column_display_name
    ,cd.ObjectDescription as column_description
    ,c.column_id
    ,ty.name as [type_name]
    ,c.max_length
    ,c.scale
    ,c.[precision]
from sys.tables t
    left join ObjectDescriptions td on td.object_id = t.object_id
    join sys.columns c on c.object_id = t.object_id
    left join ObjectDescriptions cd on cd.column_id = c.column_id and cd.object_id  = c.object_id
    join sys.types ty on c.user_type_id = ty.user_type_id

編集:

次に、単一のテーブルに関するメタデータを保持するクラスを記述し、DALにメソッドを記述して、オブジェクトまたはテーブル名に基づいてこのクラスのインスタンスを取得することにより、ASPコードでこのビューを活用できます。ページにデータを入力すると、ページは探しているレコードとテーブルのメタデータの両方を取得し、そのメタデータをグリッドヘッダー(リストビュー)または個々のラベルに付随するテキストボックスに単一でバインドできます。記録モード。

于 2010-04-20T18:42:07.367 に答える
0

私の問題を解決するために使用できるよりも、有用な記事を見つけました

于 2010-05-21T23:21:09.693 に答える