【问题标题】:Fill a DataSet using a SqlTableAdapter according to ID #根据 ID 使用 SqlTableAdapter 填充 DataSet #
【发布时间】:2014-02-21 14:13:21
【问题描述】:

我目前正在尝试根据某个 ID 号在表单加载时填写表格适配器。

已经提供的代码行用表中的所有记录填充表适配器。

但是,我只想要记录where ID = 1

我正在使用带有 SQL Server 的 VB 2012

有人可以解释一下我是怎么做的吗?

原来的代码行是:

    Me._6OrdersTableAdapter.Fill(Me.Online_Portal_Solutions_DatabaseDataSet._6Orders)

当我尝试在数据集设计器中向表中添加新查询时,我收到以下警告消息:(不太清楚这意味着什么:

“新的命令文本返回的数据与主查询的模式不同。如果不需要,请检查查询的命令文本。”

我添加的查询如下:

SELECT OrderNoID, CustomerID, CollectionDate, DeliveryDate
        , ServiceType, PostalZone, DeliveryAddress, Product
        , HazardType, Weight, NoOfPallets, OtherNotes
FROM   [6Orders]
WHERE  (HaulierID = 1)

我调用了查询fillhaulierjkp,把原来的代码行改成如下:

    Me._6OrdersTableAdapter.fillhaulierjkp(Me.Online_Portal_Solutions_DatabaseDataSet._6Orders)

然后,当我运行应用程序时,页面加载时出现此错误:

“未能启用约束。一行或多行包含违反非空、唯一或外键约束的值。”

我只想用 select 语句填充表适配器,但我希望用户能够使用绑定导航器浏览记录

【问题讨论】:

  • 发布一些相关代码,显示您到目前为止所尝试的内容,然后我们可以尝试修复必要的部分以仅获取 ID = 1 的记录。
  • @har07 我已经提供了我在问题中尝试过的内容;你能告诉我我做错了什么吗?

标签: .net sql-server vb.net ado.net tableadapter


【解决方案1】:

最后一个问题是由于在您的 DataSet 上设置的限制。也许您的列不接受空值或违反了唯一键。无论哪种方式,您都必须删除错误约束、更改服务器查询以使其与您的架构匹配或通过将EnforceConstraints 设置为False 来关闭约束。通常,当引发此错误时,您还会有错误行,其RowError 属性指示导致问题的约束。

至于您以前的问题,这是由于您的服务器结果集与 DataTable 架构所期望的不同。例如,如果您有一个名称与 int 服务器列匹配的 String 列,则会引发此错误。

【讨论】:

    【解决方案2】:

    提到您的错误,请确保您使用的是查询编辑器,以便您可以看到所选列的视觉效果。

    用于加载表单的参数

    替换

    where ID = 1
    

    where ID = ?
    

    这将在您的表适配器中创建一个 @parameter1 语句。

    然后填写参数,例如nPID

    Me.TA1.Fill(Me.DsClients.tblClients_Dems, nPID)
    

    【讨论】:

      猜你喜欢
      • 2012-02-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-23
      • 2012-11-21
      相关资源
      最近更新 更多