如何在.NET中获取外键信息

如何在.NET中获取外键信息,.net,sql-server,sqlconnection,.net,Sql Server,Sqlconnection,我正在尝试使用.NETGetSchema方法检索SQL Server中某些表的元数据。 我可以获取列信息,如数据类型和大小,但当我尝试“ForeignKeys”时,它不会告诉我相关表的名称或相关列名。 下面是我的当前代码。 这可以通过GetSchema实现吗?如果没有,我将求助于对系统表或信息表使用SQL查询,不管它们被称为什么。 如果您不知道GetSchema答案,请随意建议一个好的SQL查询 using (SqlConnection connection = new SqlConnectio

我正在尝试使用.NET
GetSchema
方法检索SQL Server中某些表的元数据。
我可以获取列信息,如数据类型和大小,但当我尝试“ForeignKeys”时,它不会告诉我相关表的名称或相关列名。
下面是我的当前代码。
这可以通过
GetSchema
实现吗?如果没有,我将求助于对系统表或信息表使用SQL查询,不管它们被称为什么。
如果您不知道
GetSchema
答案,请随意建议一个好的SQL查询

using (SqlConnection connection = new SqlConnection(connectionString))
{
    connection.Open();
    string[] restrictions = new string[4];
    restrictions[1] = schemaName;
    restrictions[2] = tableName;
    DataTable schema = connection.GetSchema("ForeignKeys", restrictions);
}

请记住,外键关系可以由多个列组成。以下是我用于FK列映射的查询:

select 
        IS_KCU1.CONSTRAINT_SCHEMA,
        IS_KCU1.CONSTRAINT_NAME,
        IS_KCU1.TABLE_SCHEMA FK_TABLE_SCHEMA,
        IS_KCU1.TABLE_NAME FK_TABLE_NAME,
        IS_KCU1.COLUMN_NAME FK_COLUMN_NAME,
        IS_KCU2.TABLE_SCHEMA REFERENCED_TABLE_SCHEMA,
        IS_KCU2.TABLE_NAME REFERENCED_TABLE_NAME,
        IS_KCU2.COLUMN_NAME REFERENCED_COLUMN_NAME
        from INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS IS_RC 

        inner join INFORMATION_SCHEMA.KEY_COLUMN_USAGE IS_KCU1 
        on IS_KCU1.CONSTRAINT_CATALOG = IS_RC.CONSTRAINT_CATALOG  
        and IS_KCU1.CONSTRAINT_SCHEMA = IS_RC.CONSTRAINT_SCHEMA 
        and IS_KCU1.CONSTRAINT_NAME = IS_RC.CONSTRAINT_NAME 

        inner join INFORMATION_SCHEMA.KEY_COLUMN_USAGE IS_KCU2 
        on IS_KCU2.CONSTRAINT_CATALOG = IS_RC.UNIQUE_CONSTRAINT_CATALOG  
        and IS_KCU2.CONSTRAINT_SCHEMA = IS_RC.UNIQUE_CONSTRAINT_SCHEMA 
        and IS_KCU2.CONSTRAINT_NAME = IS_RC.UNIQUE_CONSTRAINT_NAME 
        and IS_KCU2.ORDINAL_POSITION = IS_KCU1.ORDINAL_POSITION

如果我能让SMO对象在我的web主机上运行,我想我会使用SMO对象。我收到一个新错误,无法找到SqlClrProvider。我在本地计算机上找不到该dll,但SMO在本地计算机上工作。编辑:我找到了SqlClrProvider.dll,添加了引用,重新发布到我的web主机上,它运行得很好。使用SMO对象获取外键元数据解决了这个问题