我准备实现这样一个功能。不知道有什么办法没有。listboxA中显示数据库所有的表,
利用一个button的click事件,找出listboxA中被选中的表的所有有关系的表,并将结果显示在listboxB中。例:数据库中有表1,表2,表3,表4,表5
-表1的外键指向 -〉表2
-表3的外键指向 -〉表1
-表5的外键指向 -〉表4
如果选择了表2,存在关系的所有表就是表1,表2,表3
如果选择了表4,存在关系的所有表就是表5--------------
不知道这种针对已存在的表的表之间关系的判断,或者查找的方法有没有?我考虑了一个非常笨的方法,利用
SqlConnection.GetSchema("ForeignKeys",res);
找出他们的外键关系,例如"FK_表1_表2",然后用字符串读取查找有没有关联表,可这样表的数目增多的话,查找起来就太麻烦了。感觉不可行,不知道还有什么好的实现方法?希望大家提供意见
利用一个button的click事件,找出listboxA中被选中的表的所有有关系的表,并将结果显示在listboxB中。例:数据库中有表1,表2,表3,表4,表5
-表1的外键指向 -〉表2
-表3的外键指向 -〉表1
-表5的外键指向 -〉表4
如果选择了表2,存在关系的所有表就是表1,表2,表3
如果选择了表4,存在关系的所有表就是表5--------------
不知道这种针对已存在的表的表之间关系的判断,或者查找的方法有没有?我考虑了一个非常笨的方法,利用
SqlConnection.GetSchema("ForeignKeys",res);
找出他们的外键关系,例如"FK_表1_表2",然后用字符串读取查找有没有关联表,可这样表的数目增多的话,查找起来就太麻烦了。感觉不可行,不知道还有什么好的实现方法?希望大家提供意见
public class KeyOperation
{
public static void GetPK(Service user, Table table)
{
string sql = string.Format("exec sp_pKeys '{0}'", table.Name);
SqlConnection conn = DBHelper.GetConnection(user);
using (conn)
{
SqlCommand cmd = new SqlCommand(sql, conn);
try
{
conn.Open();
}
catch (SqlException)
{
return;
}
using (DataTable dt = DBHelper.GetDataSet(sql, conn))
{
foreach (DataRow row in dt.Rows)
{
foreach (Column column in table.Columns.Values)
{
if (row["COLUMN_NAME"].ToString() == column.Name)
{
column.DBtype = DataBaseObjectType.PrimaryKey;
column.PK_Name = row["PK_NAME"].ToString();
}
}
}
}
conn.Dispose();
} }
public static List<ForeignKey> GetFK(Service user, string tableName)
{
List<ForeignKey> keys = new List<ForeignKey>();
string sql = string.Format("exec sp_fKeys '{0}'", tableName);
SqlConnection conn = DBHelper.GetConnection(user);
using (conn)
{
SqlCommand cmd = new SqlCommand(sql, conn);
try
{
conn.Open();
}
catch (SqlException)
{
return null;
}
using (DataTable dt = DBHelper.GetDataSet(sql, conn))
{
foreach (DataRow row in dt.Rows)
{
ForeignKey fkey = new ForeignKey();
fkey.Name = row["FKCOLUMN_NAME"].ToString();
fkey.TableName = row["FKTABLE_NAME"].ToString();
fkey.FK_Name = row["FK_NAME"].ToString();
fkey.PrimaryType = row["PKTABLE_NAME"].ToString();
fkey.PrimaryKey = row["PKCOLUMN_NAME"].ToString();
keys.Add(fkey);
}
}
conn.Dispose();
}
return keys;
} }