vb.net - 更新表中的所有更改
问题描述
VS2017的Tableadapter更新配置
各位亲爱的会员,不好意思,又得用VS2017的一个VB.net SQL问题来骚扰你们了。我现在在互联网上搜索了很多天,但没有找到解决我问题的方法。所有示例都是或 C 且已过时。
情况如下: • 创建了一个 Tabteaapter 更新方法来更改数据库中的字段。• 修改了所有行中的一个字段(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 异常,
解决方案
当然这是行不通的:
UPDATE [dbo].[OBjects]
set Oserial
WHERE (PID = @parmPID)
您没有指定要设置Oserial
的内容。您必须指定一个值来将该列设置为,就像您在您所说的 SQL 中所做的那样有效。您可以指定文字值、表达式或参数,但您必须指定计算结果为您想要将列设置为的值的值。
然而,事实是,你只是做错了储蓄。您的表格适配器已经有一个方法可以为您保存所有更改:Update
方法。你不需要其他任何东西。只需更改此:
TA.ObjectsUpdateOserial(parmPID)
对此:
TA.Update(DS.OBjects)
你可以走了。
表适配器的工作方式是它包含一个或多个查询,即SELECT
语句,和三个动作语句,即INSERT
,UPDATE
和DELETE
语句各一个。
默认情况下,表适配器有Fill
,GetData
和Update
方法。您可以调用Fill
或GetData
执行默认查询,这基本上是一个SELECT *
并且应该保持这种方式。该Fill
方法将填充现有的DataTable
,而该GetData
方法将创建一个新的DataTable
并填充它。您通常使用Fill
for a DataTable
in aDataSet
和GetData
for a lone DataTable
。
一旦你做了任何你想做的改变,你打电话Update
,这些改变将被保存。 使用 a of 、for rows 和for rowsUpdate
执行InsertCommand
for all 。DataRows
RowState
Added
UpdateCommand
Modified
DeleteCommand
Deleted
如果您想添加另一个查询,例如按特定列过滤,那么您可以在设计器中执行此操作。这样做将添加两个新方法,它们等效于Fill
并GetData
执行您的新查询而不是默认查询。您应该为这些方法使用提供的FillBy
和GetDataBy
前缀,并在过滤器中的列之后命名它们。在您的情况下,如果您正在过滤,PID
那么这些方法应该被命名为FillByPID
and GetDataByPID
。
无论您使用这些方法来填充 aDataTable
还是使用默认值,您仍然可以使用Update
将所有更改保存在 a 中DataTable
。如果您想查看这些操作命令中使用的 SQL,请在DataSet
设计器中选择您的表适配器并查看“属性”窗口中的InsertCommand
、UpdateCommand
和DeleteCommand
。
推荐阅读
- android - 更新分页库时出错:程序类型已存在:kotlinx.coroutines.*
- security - 给出关闭我当前的消防基地帐户以打开另一个但正在工作的帐户的程序
- embedded - IAR 源浏览日志错误
- javascript - Swift 脚本可以在 Swift iOS 应用程序中执行吗?
- javascript - Enmap 基于 off 键以升序生成数字
- python - 如何通过 Selenium 设置 AngularJS 下拉菜单的值?
- python - While loop problem, or probably sth else?
- jquery - 通过不带 FormData 的 dropzone 上传文件
- reactjs - 在设置状态时使用带有 react-hook-form 无限循环的 React tinymce
- pandas - 在 pandas 中,根据 +- 的外观将列拆分为 2