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异常,
答案 0 :(得分:0)
这当然是行不通的:
UPDATE [dbo].[OBjects]
set Oserial
WHERE (PID = @parmPID)
您没有指定将Oserial
设置为什么。您必须指定一个值以将该列设置为该值,就像在您说的SQL中可以正常工作一样。您可以指定一个文字值,一个表达式或一个参数,但是您必须指定一些计算结果,将其设置为要将列设置为的值。
但是事实是,您只是在做错误的保存。您的表适配器已经有了一种可以为您保存所有更改的方法:Update
方法。您不需要任何其他东西。只需更改此内容即可:
TA.ObjectsUpdateOserial(parmPID)
对此:
TA.Update(DS.OBjects)
你很高兴。
表适配器的工作方式是它包含一个或多个查询,即SELECT
语句,以及三个动作语句,即INSERT
,UPDATE
和{{1中的每个}}语句。
默认情况下,表适配器具有DELETE
,Fill
和GetData
方法。您可以调用Update
或Fill
来执行默认查询,该查询基本上是一个GetData
,应保持这种方式。 SELECT *
方法将填充现有的Fill
,而DataTable
方法将创建并填充新的GetData
。通常在DataTable
中将Fill
用于DataTable
,将DataSet
用于单独的GetData
。
一旦您要进行任何更改,请致电DataTable
,这些更改将被保存。 Update
对Update
的{{1}},InsertCommand
行的DataRows
和{{ 1}}行RowState
。
如果您要添加其他查询,例如按特定列进行过滤,则可以在设计器中执行此操作。这样做将添加两个等效于Added
和UpdateCommand
的新方法,但将执行新查询而不是默认查询。您应该为这些方法使用提供的Modified
和DeleteCommand
前缀,并以过滤器中的列命名。就您而言,如果您使用Deleted
进行过滤,则这些方法应分别命名为Fill
和GetData
。
无论您使用这些方法来填充FillBy
还是使用默认方法,仍将使用GetDataBy
将所有更改保存在PID
中。如果要查看这些操作命令中使用的SQL,请在FillByPID
设计器中选择表适配器,然后查看菜单中的GetDataByPID
,DataTable
和Update
。属性窗口。