在C#asp.net vs2008上工作。用 Reader = Command.ExecuteReader(CommandBehavior.KeyInfo)我试着获取外键,有没有办法搞定它? 如果我写
string sql = string.Format("Select * from {0}", tableName);
conn.Open();
SqlCommand cmd = new SqlCommand(sql, conn);
cmd.CommandType = CommandType.Text;
SqlDataReader reader = cmd.ExecuteReader(CommandBehavior.KeyInfo);
DataTable schema = reader.GetSchemaTable();
然后在isKey = true为主键设置。我想从这个命令获得外键。有什么方法可以得到它。 如果有任何查询请问。请提前谢谢。
答案 0 :(得分:0)
如果您拥有管理权限。您可以从以下查询中获得结果。
SELECT
K_Table = FK.TABLE_NAME,
FK_Column = CU.COLUMN_NAME,
PK_Table = PK.TABLE_NAME,
PK_Column = PT.COLUMN_NAME,
Constraint_Name = C.CONSTRAINT_NAME
FROM INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS C
INNER JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS FK ON C.CONSTRAINT_NAME = FK.CONSTRAINT_NAME
INNER JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS PK ON C.UNIQUE_CONSTRAINT_NAME = PK.CONSTRAINT_NAME
INNER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE CU ON C.CONSTRAINT_NAME = CU.CONSTRAINT_NAME
INNER JOIN (
SELECT i1.TABLE_NAME, i2.COLUMN_NAME
FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS i1
INNER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE i2 ON i1.CONSTRAINT_NAME = i2.CONSTRAINT_NAME
WHERE i1.CONSTRAINT_TYPE = 'PRIMARY KEY'
) PT ON PT.TABLE_NAME = PK.TABLE_NAME
Where FK.TABLE_NAME = YourtableName
您可以在代码中使用以下代码
System.Data.SqlClient.SqlConnection con = new System.Data.SqlClient.SqlConnection(@"Connection String");
con.Open();
string str = "SELECT ";
str+= " K_Table = FK.TABLE_NAME,";
str+= " FK_Column = CU.COLUMN_NAME,";
str+= " PK_Table = PK.TABLE_NAME,";
str+= " PK_Column = PT.COLUMN_NAME,";
str+= " Constraint_Name = C.CONSTRAINT_NAME";
str+= " FROM INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS C";
str+= " INNER JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS FK ON C.CONSTRAINT_NAME = FK.CONSTRAINT_NAME";
str+= " INNER JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS PK ON C.UNIQUE_CONSTRAINT_NAME = PK.CONSTRAINT_NAME";
str+= " INNER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE CU ON C.CONSTRAINT_NAME = CU.CONSTRAINT_NAME";
str+= " INNER JOIN (";
str+= " SELECT i1.TABLE_NAME, i2.COLUMN_NAME";
str+= " FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS i1";
str+= " INNER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE i2 ON i1.CONSTRAINT_NAME = i2.CONSTRAINT_NAME";
str+= " WHERE i1.CONSTRAINT_TYPE = 'PRIMARY KEY'";
str+= " ) PT ON PT.TABLE_NAME = PK.TABLE_NAME";
str+= " Where FK.TABLE_NAME = 'f'";
System.Data.SqlClient.SqlCommand cmd = new System.Data.SqlClient.SqlCommand(str, con);
System.Data.SqlClient.SqlDataReader dr = cmd.ExecuteReader();
if (dr.Read())
{
}
答案 1 :(得分:0)
ADO.NET当前不从数据源返回外键信息。 CommandBehavior.KeyInfo仅指主键信息。
<强> http://support.microsoft.com/kb/310107 强>
使用此::
**选择
fk.CONSTRAINT_NAME,fk.UNIQUE_CONSTRAINT_NAME,cn.TABLE_NAME,cn.COLUMN_NAME
来自
INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS为fk
将INFORMATION_SCHEMA.TABLE_CONSTRAINTS加入为pk
on
pk.CONSTRAINT_NAME = fk.UNIQUE_CONSTRAINT_NAME
将INFORMATION_SCHEMA.KEY_COLUMN_USAGE加入为cn
on cn.CONSTRAINT_NAME = fk.CONSTRAINT_NAME
其中cn.TABLE_NAME ='tablename'**