2011-11-26 33 views
0

如何获取表的顺序列表?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); 
     } 
     } 
    } 
} 

例如:两个表:

PERSONID, Name, AdressID

ADRESSID, Town

Person.ID = 1, Person.Name = "John Doe", Person.AdressID = 1 

Adress.ID = 1, Adress.Town = "Downtown" 

这是第一个数据库的行。我想用我的代码在第二个数据库中导入它。

该地址必须是第一个插入,导致外键。然后我可以导入Person。

现在我需要一个表格顺序列表,我可以看到我必须在Person之前导入Address

+1

这个“序”,你需要照顾这里确实是一种**语义**的东西 - **你**作为数据的所有者知道的。我没有看到任何简单的方法来发现这一点。所以基本上,这取决于**你**以这样的方式编写你的代码,以便正确的顺序得到遵守 - ADO.NET中没有“设置”或任何东西,你可以打开,这样ADO.NET会为你做这个。 –

+0

但是您可以采取一些步骤来确定外键定义的表之间的依赖关系 - 说实话这可能不是难点 - 问题在于处理自动生成的键值 – Murph

回答

0

也许你应该设置你的约束做“延迟”,所以他们会在提交时检查,而不是每次更新?

+0

SQL Server没有延迟约束 –

+0

嗯,是的,但是可以暂时禁用约束,就像在[这个问题]中一样(http://stackoverflow.com/questions/159038/can-foreign-key-constraints-be-temporarily-disabled-using-t-sql ) –