【问题标题】:Relaxing Constraints for a data table adapter放宽数据表适配器的约束
【发布时间】:2011-10-17 16:31:01
【问题描述】:

我在使用数据表适配器时试图放松我的约束,但我得到一个对象引用未设置为对象实例错误。它发生在 ds.DataSet.EnforceConstraints = false; 的行上;

一般来说,我想知道如何防止数据表强制执行约束。

ubsmysDataSetTableAdapters.FormSaveDataTableAdapter ta = new ubsmysDataSetTableAdapters.FormSaveDataTableAdapter();

myDataSet.FormSaveDataDataTable ds = new myDataSet.FormSaveDataDataTable();

ds.DataSet.EnforceConstraints = false;

if (isAdmin) ds = ta.GetByUserIdForAdminUser(userId);
else ds = ta.GetByUserId(userId);
ds.DataSet.EnforceConstraints = true;

我对此很陌生,因此我们将不胜感激。

【问题讨论】:

  • 如果 ds 已经是一个 DataSet 为什么要调用 ds.DataSet ?还是做一些调试,是 ds null 还是 ds.DataSet null?
  • 这是个好问题。智能感知告诉我这是 EnforceConstraints 的属性所在的位置。让我试试吧。
  • 好像ds不是数据集,而是数据表……嗯
  • 不,只是一个用于从表中获取数据的表适配器。没什么特别的。
  • 好的,请参阅下面我经过大量编辑的答案。如果您遵循代码或有任何问题,请告诉我。

标签: c# .net sql winforms tableadapter


【解决方案1】:

尝试以下操作,您可能需要调整您看到的蓝色文本以与您的文本完美匹配,但您应该能够理解:

使用 Fill 方法获取数据:

ubsmysDataSet ds = new ubsmysDataSet();

ubsmysDataSet.FormSaveDataDataTable dt = new ubsmysDataSet.FormSaveDataDataTable();

ds.Tables.Add(dt);

ds.EnforceConstraints = false;

ubsmysDataSetTableAdapters.FormSaveDataTableAdapter ta = new ubsmysDataSetTableAdapters.FormSaveDataTableAdapter();

if (isAdmin)
{

}
else
{
    ta.FillByUserId(dt,130559)
}

ds.EnforceConstraints = true;

请参阅上面添加的行。

【讨论】:

  • 这看起来很有希望。让我试试这个。
  • 不,这不起作用。尽管我们为 ds 关闭了约束并将 dt 添加到 ds.Tables 中,但仍然对 dt 强制执行约束
  • 您可以直接转到数据集本身并关闭约束,但我不知道您正在解决哪些限制。 (让我看看我是否可以调整代码,如果这不是一个选项)。
  • 我也试过了,似乎也有同样的问题。让我再试一次看看。
  • 如果这不起作用,您可以尝试添加我刚刚在答案中添加的行,看看是否有效。
【解决方案2】:
new myDataSet.FormSaveDataDataTable();

返回null,因此当您尝试ds.DataSet.EnforceConstraints = false; 时,ds 将是null

这里感觉有些不对劲,但由于您尚未发布所有代码,我们无法全面评估。

【讨论】:

  • 如果是新数据集,会不会为空?如果我先填充它并尝试将 EnforceConstraints 设置为 false,它会告诉我我遇到了约束问题。
  • 我指出您的 Object reference not set to an instance of an object 错误。并且新数据集与空数据集不同
  • 我也不是。就像我说的,你给我们的太少了。我猜你得到的很少。我们无能为力。也许如果您将代码发布到FormSaveDataDataTable
  • 是表适配器生成的代码。没有什么不寻常的。表适配器在创建时是否最初返回 null?
  • 看起来我实际上想要设置的是数据表,它在由 GetByUserId 方法设置之前为空。但是,这将返回一个数据表,而不是一个数据集。如何释放对这个数据表的数据集的约束?
猜你喜欢
  • 2011-12-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-02
  • 1970-01-01
  • 2017-03-26
相关资源
最近更新 更多