更新表格中的所有更改

时间:2018-10-29 05:31:30

标签: vb.net

VS2017的Tableadapter更新配置

尊敬的会员, 抱歉,我必须再次在VS2017中遇到VB.net SQL问题。 我已经在互联网上搜索了很多天,但是没有找到解决我问题的方法。所有示例都是C或过时的。

情况如下: •创建了Tabteadapter更新方法来更改数据库中的字段。 •修改了所有行中的字段(RENUM字段为Oserial)。 •尝试使用Tableadapter更新数据库中的更改。 •始终会产生错误,除非Oserial字段设置为另一个字段或文字的值(设置Oserial = PID),在这种情况下,DB确实已更改,但没有正确的值。

我不明白如何配置更新方法 在不设置新值的情况下更新数位板中的所有更改。 希望有人可以帮助我或告诉我在哪里可以找到样品 源代码。

我的代码:-----------------------

Public parmPID As String = "159"

Public Sub Renum()
    Dim n As Integer = 0

    Dim DS As New Pr2DataSet1()
    Dim TA As New Pr2DataSet1TableAdapters.OBjectsTableAdapter()

    TA.OBjectsFillByPIDOserial(DS.OBjects, parmPID)
    Try
        For Each dr As DataRow In DS.Tables(0).Rows
            n = n + 1
            DS.Tables(0).Rows(n - 1).Item   ("Oserial") = n 
       Next

        TA.ObjectsUpdateOserial(parmPID)
        TA.Connection.Close()

    Catch x As Exception
        Labelbox.Text = x.ToString
    End Try
End Sub

数据库设计:---------------------------

CREATE TABLE [dbo].[OBjects] (
[PID]          INT   NOT NULL,
[OID]  INT   IDENTITY (1, 1) NOT  ULL,
[Oserial]      INT    NOT NULL,

SQl查询1:----------------------

UPDATE [dbo].[OBjects] 
set Oserial= PID
WHERE (PID = @parmPID)

这可以正常工作,但PID粘胶已更改

SQl查询2:----------------------

UPDATE [dbo].[OBjects] 
set Oserial 
WHERE (PID = @parmPID)

错误:: ----------------------

  

System.Data.SqlClient.SqlException(0x80131904):附近的语法不正确   关键字“ WHERE”。在   System.Data.SqlClient.SqlConnection.OnError(SqlException异常,

1 个答案:

答案 0 :(得分:0)

这当然是行不通的:

UPDATE [dbo].[OBjects] 
set Oserial 
WHERE (PID = @parmPID)

您没有指定将Oserial设置为什么。您必须指定一个值以将该列设置为该值,就像在您说的SQL中可以正常工作一样。您可以指定一个文字值,一个表达式或一个参数,但是您必须指定一些计算结果,将其设置为要将列设置为的值。

但是事实是,您只是在做错误的保存。您的表适配器已经有了一种可以为您保存所有更改的方法:Update方法。您不需要任何其他东西。只需更改此内容即可:

TA.ObjectsUpdateOserial(parmPID)

对此:

TA.Update(DS.OBjects)

你很高兴。

表适配器的工作方式是它包含一个或多个查询,即SELECT语句,以及三个动作语句,即INSERTUPDATE和{{1中的每个}}语句。

默认情况下,表适配器具有DELETEFillGetData方法。您可以调用UpdateFill来执行默认查询,该查询基本上是一个GetData,应保持这种方式。 SELECT *方法将填充现有的Fill,而DataTable方法将创建并填充新的GetData。通常在DataTable中将Fill用于DataTable,将DataSet用于单独的GetData

一旦您要进行任何更改,请致电DataTable,这些更改将被保存。 UpdateUpdate的{​​{1}},InsertCommand行的DataRows和{{ 1}}行RowState

如果您要添加其他查询,例如按特定列进行过滤,则可以在设计器中执行此操作。这样做将添加两个等效于AddedUpdateCommand的新方法,但将执行新查询而不是默认查询。您应该为这些方法使用提供的ModifiedDeleteCommand前缀,并以过滤器中的列命名。就您而言,如果您使用Deleted进行过滤,则这些方法应分别命名为FillGetData

无论您使用这些方法来填充FillBy还是使用默认方法,仍将使用GetDataBy将所有更改保存在PID中。如果要查看这些操作命令中使用的SQL,请在FillByPID设计器中选择表适配器,然后查看菜单中的GetDataByPIDDataTableUpdate。属性窗口。