如何获取表的顺序列表?C#/ SQL Server - 确定表的顺序
我有两个数据库(相同的模式),我想从第一个数据库导入数据到第二个数据库。
但现在我有一个约束问题。所以我必须在插入之前订购表格。这是我的C#代码:
public static void SQLUpdate(DataSet ds)
{
foreach (DataTable table in ds.Tables)
{
string TableName = table.TableName;
DataTable CurrentDt = clsDatabase.SQLQuery("SELECT * FROM " + TableName);
SqlDataAdapter da = new SqlDataAdapter("Select * FROM " + TableName, con);
SqlCommandBuilder cb = new SqlCommandBuilder(da);
foreach (DataRow row in table.Rows)
{
DataRow[] drs = CurrentDt.Select(String.Format("[ID] = '{0}'", row["ID"].ToString()));
// No entry? INSERT!
if (drs == null || drs.Length == 0)
{
da.InsertCommand = cb.GetInsertCommand();
da.Update(new DataRow[] { row });
}
// Entry? UPDATE!
else if (drs.Length == 1)
{
da.UpdateCommand = cb.GetUpdateCommand();
da.UpdateCommand.CommandText += " WHERE ID = @ID";
da.Update(drs);
}
}
}
}
例如:两个表:
PERSON:ID, Name, AdressID
ADRESS:ID, Town
Person.ID = 1, Person.Name = "John Doe", Person.AdressID = 1
Adress.ID = 1, Adress.Town = "Downtown"
这是第一个数据库的行。我想用我的代码在第二个数据库中导入它。
该地址必须是第一个插入,导致外键。然后我可以导入Person。
现在我需要一个表格顺序列表,我可以看到我必须在Person
之前导入Address
。
这个“序”,你需要照顾这里确实是一种**语义**的东西 - **你**作为数据的所有者知道的。我没有看到任何简单的方法来发现这一点。所以基本上,这取决于**你**以这样的方式编写你的代码,以便正确的顺序得到遵守 - ADO.NET中没有“设置”或任何东西,你可以打开,这样ADO.NET会为你做这个。 –
但是您可以采取一些步骤来确定外键定义的表之间的依赖关系 - 说实话这可能不是难点 - 问题在于处理自动生成的键值 – Murph