C# 数据集上载到SQL server,外键问题

C# 数据集上载到SQL server,外键问题,c#,sql,sql-server,dataset,C#,Sql,Sql Server,Dataset,以下是我如何从服务器填充数据集(为我需要的每个表调用此方法): 在处理DataSet表中的数据后,我需要将表中的更改上载回服务器: public static void UploadSqlServer(DataTable dt) { using (var cmd = new SqlCommand(String.Format("SELECT * FROM {0}", "dbo." + dt.TableName), new SqlConnection(conn_string

以下是我如何从服务器填充数据集(为我需要的每个表调用此方法):

在处理DataSet表中的数据后,我需要将表中的更改上载回服务器:

public static void UploadSqlServer(DataTable dt)
{
    using (var cmd = new SqlCommand(String.Format("SELECT * FROM {0}", "dbo." + dt.TableName), 
        new SqlConnection(conn_string)))
    {
        using (var da = new SqlDataAdapter(cmd))
        {
             using (var cb = new SqlCommandBuilder(da))
                da.Update(dt);
        }
    }
}
问题是,表(外键)中存在依赖项,我无法逐个迭代地上载表(根据上载顺序,我可能会得到一个错误
INSERT(DELETE)语句与外键约束冲突…

正确的处理方法是什么

例如:

NamesList
:第1列(pm键)-
ID
,第2列-
name

People
:第1列(pm键)ID,第2列(fn键入
NamesList
)-
name


用户在
姓名列表
中添加了新行,并在
人员
表中创建了新人员。如果我先尝试将
人员
表上载到SQL server,我会得到一个错误,因为
名称列表
中还没有这样的
名称。这种情况与删除相反。

听起来您指定的键值在父表中不存在

操作数据时,是否向其中添加新的外键值

如果是,请检查添加的内容是否存在于父表中


您是否能够查询数据库以查看您添加的外键值是否存在?

您正在进行哪种操作?我很难想象你会做什么样的一般性操作,这意味着你无法控制做事情的顺序。行添加\删除\编辑,因此一些行被标记为DataRowState.Deleted等等。因此,如果你向表A添加行,也向表B添加行,其中表A有外键,在将更改提交到表B之前,如何阻止您将更改提交到表A,并避免冲突?您可以通过将外键的引用触发器操作更改为DELETE CASCADE上的
来处理表A中的删除。问题发生在SQL server中,而不是本地数据集中。这个触发器(如我所知)需要在SQL基础设置中更改,但我没有访问真实数据库的权限。我想,还有另一种正确的方法可以在应用程序中本地存储sql base并将其上载回服务器,而不是为DataSet中的每个表调用
UploadSqlServer
(我甚至可以手动编写正确的调用顺序,但删除和添加行的顺序不同)我的本地DataSet具有所有必需的行,所以没有冲突(我已经通过VS中的DataSet viewer检查了这一点)。问题发生在SQL server中。我在问题中加了一个例子
public static void UploadSqlServer(DataTable dt)
{
    using (var cmd = new SqlCommand(String.Format("SELECT * FROM {0}", "dbo." + dt.TableName), 
        new SqlConnection(conn_string)))
    {
        using (var da = new SqlDataAdapter(cmd))
        {
             using (var cb = new SqlCommandBuilder(da))
                da.Update(dt);
        }
    }
}