【问题标题】:DataSet upload to SQL server, foreign keys issue数据集上传到 SQL 服务器,外键问题
【发布时间】:2014-07-18 22:15:54
【问题描述】:

这是我从服务器填充 DataSet 的方法(为我需要的每个表调用此方法):

private static void PopulateDataTable(DataSet ds, string tablename, string sqlCommand = "SELECT * FROM {0}")
{
    var da
        = new SqlDataAdapter(String.Format(sqlCommand, "dbo." + tablename), connection);
    da.FillSchema(ds, SchemaType.Source, tablename);
    da.MissingSchemaAction = MissingSchemaAction.AddWithKey;
    da.Fill(ds, tablename);
}

在对 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);
        }
    }
}

问题是表(外键)中存在依赖关系,我无法上传表逐个迭代它们(根据上传顺序我会得到错误The INSERT (DELETE) statement conflicted with the FOREIGN KEY constraint ...

处理这个问题的正确方法是什么?

例子:

NamesList: column1 (pm key) - ID, column2 - name

People: column1 (pm key) - ID, column2 (fn key in NamesList) - name

用户在NameList 中添加了新行并在People 表中创建了新人。如果我先尝试将People 表上传到SQL 服务器,我会收到错误消息,因为NamesList 中还没有这样的name。删除后情况正好相反。

【问题讨论】:

  • 你在做什么操作?我很难想象你可以做的那种通用操作意味着你无法控制你做事的顺序。
  • 行添加\删除\编辑,所以有些行被标记为DataRowState.Deleted等等。
  • 因此,如果您向表 A 中添加行,并向表 B 中添加行,其中表 A 有一个外键,那么在您提交更改之前阻止您提交对表 A 的更改是什么?表B,避免冲突?您可以通过将外键的引用触发操作更改为ON DELETE CASCADE 来处理表 A 中的删除
  • 问题出现在SQL Server,而不是本地DataSet。这个触发器(据我所知)需要在 SQL 基本设置中更改,但我无权访问真实数据库。我想,还有另一种正确的方法可以在您的应用程序中本地存储 sql base 并将其上传回服务器,而不是为 DataSet 中的每个表调用UploadSqlServer(我什至可以手动编写正确的调用顺序,但删除时会有所不同并添加行)

标签: c# sql sql-server dataset


【解决方案1】:

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

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

如果您愿意,请检查添加的是否存在于父表中。

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

【讨论】:

  • 我的本地数据集有所有必要的行,所以没有冲突(我已经通过 VS 中的数据集查看器检查了这一点)。问题出现在 SQL 服务器中。我在我的问题中添加了一个示例
猜你喜欢
  • 1970-01-01
  • 2019-02-20
  • 1970-01-01
  • 2010-10-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-21
  • 1970-01-01
相关资源
最近更新 更多