根据ID#使用SqlTableAdapter填充DataSet

时间:2014-02-21 14:13:22

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

我目前正在尝试根据特定的ID编号填写表格加载表格。

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

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

我正在使用VB 2012和SQL Server

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

原始代码行是:

    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语句填充表适配器,但我希望用户能够使用绑定导航器浏览记录

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

引用您的错误,请确保您使用的是查询编辑器,以便您可以直观地看到所选列。

用于加载表单的参数

替换

where ID = 1

where ID = ?

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

然后填写参数,例如NPID

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