SqlDataAdapter.Update 未更新

     2023-05-07     297

关键词:

【中文标题】SqlDataAdapter.Update 未更新【英文标题】:SqlDataAdapter.Update not updating 【发布时间】:2015-10-21 19:34:29 【问题描述】:

(我应该说我对 vb.net 相当陌生)

我在覆盖我的数据库中的条目时遇到问题。我认为问题在于 SqlDataAdapter.Update 没有用我创建的新数据表信息正确覆盖数据库。

据我了解,当我告诉它更新时,它应该用数据表完全替换数据库中的信息......不是吗?

简而言之就是这个问题:

基本上,我有一个数据库(.mdf 文件),其中有一个名为“test”的表。我使用 SqlDataAdapter 使用“测试”制作数据集。我有另一个通过解析 csv 制作的数据表 - 它称为“ToLoad”。我现在想清除“测试”数据表,复制 csv 数据表中的所有条目,然后将其保存到数据库中。

我已经调试了这一切,一切似乎都正常,除了当我使用 SqlDataAdapter.Update 时,我收到一条错误消息,告诉我无法复制主键。这是因为在从数据表中输入新条目之前,并没有完全从数据库中清除旧条目。

我已经检查过测试数据表实际上在代码的早期就被清除了......确实如此。 我已经检查过新的 csv 条目是否正在被复制到“测试”数据表中……它们是。

您可以在这方面提供任何帮助真的感谢

谢谢 克雷格

'MAKE A NEW SQL CONNECTION
Dim DBConnection As New SqlConnection

'SET THE CONNECTION STRING.
DBConnection.ConnectionString = "Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=C:\Project\Members.mdf;Integrated Security=True"

'OPEN THE CONNECTION TO THE DATABASE
DBConnection.Open()

'OPEN AN ADAPTER AND SELECT EVERYTHING FROM THE 'TEST' TABLE
Dim mySqlDataAdapter As New SqlDataAdapter("SELECT * FROM Test", DBConnection)
Dim mySqlCommandBuilder As New SqlCommandBuilder(mySqlDataAdapter)





Dim DBDataset As DataSet = New DataSet

'FILL THE DATASET WITH THE TEST TABLE  
 mySqlDataAdapter.Fill(DBDataset, "Test")

'CLEAR ALL ENTRIES IN THE DATATABLE (SO I CAN FILL IT FROM SCRATCH)
 DBDataset.Tables("test").Clear()





 ''SET UP A LOOP TO ADD EACH RECORD FROM THE CSV DATATABLE TO THE DATABASE DATATABLE

  Dim CSV_row_number As Int16
  CSV_row_number = ds.Tables("toload").Rows.Count


  Dim i As Int16   
  i = 0
       Do Until i = CSV_row_number - 1


            'MAKES TWO NEW DATAROW OBJECTS
            Dim DB_row As DataRow
            Dim CSV_row As DataRow

            'SET THE CSV_ROW OBJECT EQUAL TO ROW(i) OF THE CSV DATATABLE
            CSV_row = ds.Tables("toload").Rows(i)

            DB_row = DBDataset.Tables("test").NewRow()

            'THIS SETS ALL OF THE COLUMNS IN THIS NEW ROW AS EQUAL TO ROW1 IN THE CSV DATATABLE
            DB_row("Name") = CSV_row("Name")
            DB_row("Quality") = CSV_row("Address")
            DBDataset.Tables("test").Rows.Add(DB_row)

            i = i + 1

        Loop



 mySqlDataAdapter.Update(DBDataset.Tables("Test"))

【问题讨论】:

【参考方案1】:

经过一番谷歌搜索和一些试验和错误后,我设法自己解决了这个问题。发布我的代码以防它对其他人有用

克雷格

 'MAKE A NEW SQL CONNECTION
    Dim DBConnection As New SqlConnection

    'SET THE CONNECTION STRING. YOU GET THIS BY GOING TO SERVER EXPLORER, THEN CLICKING ON THE DATABASE
    'THE CONNECTION STRING IS IN PROPERTIES 
    DBConnection.ConnectionString = "Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=C:\Users\ME\Project\Members.mdf;Integrated Security=True"

    'OPEN THE CONNECTION TO THE DATABASE
    DBConnection.Open()



    'THIS OPENS AN ADAPTER TO THE DATABASE, AND SELECTS EVERYTHING FROM THE 'TEST' TABLE IN THAT DATABASE
    Dim mySqlDataAdapter As New SqlDataAdapter("SELECT * FROM MemberList", DBConnection)
    'THIS LETS US USE SQL ON THE DATATABLE (IT GETS PASSED THE ABOVE SQL STATEMENT)
    Dim mySqlCommandBuilder As New SqlCommandBuilder(mySqlDataAdapter)


    'THIS MAKES ANOTHER NEW DATASET 
    Dim DBDataset As DataSet = New DataSet


    ''THIS FILLS THAT DATASET WITH THE TEST TABLE (WHICH THE DATA ADAPTOR GRABBED ABOVE) 
    mySqlDataAdapter.FillSchema(DBDataset, SchemaType.Source, "MemberList")
    mySqlDataAdapter.Fill(DBDataset, "MemberList")


    'THIS MAKES A NEW DATATABLE 
    'I THEN MAKE ALL CHANGES NEEDED 

    Dim EDITmembers As DataTable
    EDITmembers = DBDataset.Tables("MemberList")


    ''FIRST, IM GOING TO CLEAR ALL ENTRIES IN THE DATATABLE (SO I CAN FILL IT FROM SCRATCH)

    'COUNT THE NUMBER OF ENTRIES TO CLEAR
    Dim RowsInDB As Integer
    RowsInDB = EDITmembers.Rows.Count()

    'SET UP A LOOP TO CLEAR THEM
    Dim Data_row As DataRow
    Dim k As Integer = 0

    Do Until k = RowsInDB

        Data_row = EDITmembers.Rows(k)

        Data_row.Delete()

        k = k + 1

    Loop

    'ONCE ALL THE ROWS ARE CLEARED, SAVE THE CHANGES BY UPDATING THE ACTUAL DATABASE
    mySqlDataAdapter.Update(DBDataset, "MemberList")





    ''THEN I SET UP A LOOP TO ADD EACH RECORD FROM THE CSV DATATABLE TO THE DATABASE DATATABLE
    ''I FIRST NEED TO KNOW HOW MANY ITERATIONS OF THE LOOP TO DO

    Dim CSV_row_number As Int16
    'COUNT THE NUMBER OF ROWS AND SET THE ABOVE INT EQUAL TO THIS
    CSV_row_number = ToLoad.Rows.Count


    Dim j As Int16   
    j = 0
    Do Until j = CSV_row_number - 1


        'THIS MAKES TWO NEW DATAROW OBJECTS
        Dim DB_row As DataRow
        Dim CSV_row As DataRow

        'THIS SETS THE CSV_ROW OBJECT EQUAL TO THE FIRST ROW OF THE CSV DATATABLE
        CSV_row = ToLoad.Rows(j)


        'THIS SETS DB_ROW EQUAL TO A NEW ROW IN THE DATATABLE MADE FROM THE DATABASE
        DB_row = EDITmembers.NewRow()

        'THIS SETS ALL OF THE COLUMNS IN THIS NEW ROW AS EQUAL TO THE CORRESPONDING ROW IN THE CSV DATATABLE
        DB_row("Contact Name") = CSV_row("Contact Name")
        DB_row("Do not mail") = CSV_row("Do not mail")
        DB_row("Membership Type") = CSV_row("Membership Type")
        DB_row("Street Address") = CSV_row("Street Address")
        DB_row("Supplemental Address 1") = CSV_row("Supplemental Address 1")
        DB_row("Supplemental Address 2") = CSV_row("Supplemental Address 2")
        DB_row("City") = CSV_row("City")
        DB_row("Postal Code") = CSV_row("Postal Code")
        DB_row("Email") = CSV_row("Email")
        DB_row("Phone (primary)") = CSV_row("Phone (primary)")


        EDITmembers.Rows.Add(DB_row)

        j = j + 1

    Loop




   'UPDATE THE DATABASE WITH ALL THE CHANGES
    mySqlDataAdapter.Update(DBDataset, "MemberList")
    MessageBox.Show("done!")

【讨论】:

SqlDataAdapter.update() 不更新数据库

】SqlDataAdapter.update()不更新数据库【英文标题】:SqlDataAdapter.update()notupdatingdatabase【发布时间】:2015-04-0704:22:47【问题描述】:我正在使用SqlDataAdapter在PostLikes表中搜索(PostId,UserId),如果找到该行,我正在使用SqlCommandBuilder.GetDelet... 查看详情

当 RowState = Modified 时 SQLDataAdapter.Update() 不更新

】当RowState=Modified时SQLDataAdapter.Update()不更新【英文标题】:SQLDataAdapter.Update()notUpdatingwhenRowState=Modified【发布时间】:2018-05-1516:41:39【问题描述】:我正在尝试设置一个程序,当用户更新项目描述时,将在保存表单时更新数据库... 查看详情

SqlDataAdapter.Update(dataset) 方法插入新行但不更新现有行

】SqlDataAdapter.Update(dataset)方法插入新行但不更新现有行【英文标题】:SqlDataAdapter.Update(dataset)methodinsertsnewrowsbutdoesnotupdatesexistingrows【发布时间】:2014-06-0114:56:49【问题描述】:我正在创建具有DataGrigView来呈现表格的winform应用程... 查看详情

SqlDataAdapter.Update 直到第二次更新才写入表

】SqlDataAdapter.Update直到第二次更新才写入表【英文标题】:SqlDataAdapter.Updatenotwritingtotableuntilsecondupdate【发布时间】:2014-08-0201:15:03【问题描述】:我有一个用C#2010Express开发的程序,它的表单由一个DataGridView组成,下面有一个单... 查看详情

使用带参数的 SqlDataAdapter.Update()

】使用带参数的SqlDataAdapter.Update()【英文标题】:UsingSqlDataAdapter.Update()withParameters【发布时间】:2011-08-2614:20:32【问题描述】:如何尝试通过参数化查询找出如何使用SqlDataAdapter.Update(DataTable)方法。如何在不遍历整个DataTable的情... 查看详情

使用 SqlDataAdapter.Update 方法时复制表行

】使用SqlDataAdapter.Update方法时复制表行【英文标题】:DuplicatingtablerowswhenusingSqlDataAdapter.UpdateMethod【发布时间】:2013-11-0403:08:40【问题描述】:在我的项目中,我有表格“产品”。IDNamePrice------------------1xyz1002abc2003pqr300在我的c#代... 查看详情

C# SqlDataAdapter.Update()

】C#SqlDataAdapter.Update()【英文标题】:【发布时间】:2010-07-1208:39:42【问题描述】:我要疯了。我做了ff:创建数据表。通过SqlDataAdapter从SQL数据库填充它。通过datagridview编辑数据表。调用sqldataadapter.update但更改不会持久化到数据... 查看详情

在 SqlDataAdapter.Update() 中获取错误消息

】在SqlDataAdapter.Update()中获取错误消息【英文标题】:GettingerrormessageinSqlDataAdapter.Update()【发布时间】:2016-07-1419:43:38【问题描述】:我有一个数据库表(在本例中为空)createtablewords(idintnotnull,wordnvarchar(50)notnull)还有一个DataGridVie... 查看详情

200万条记录的SqlDataAdapter.Update()速度极慢

】200万条记录的SqlDataAdapter.Update()速度极慢【英文标题】:SqlDataAdapter.Update()of2millionrecordsisextremelyslow【发布时间】:2019-04-3009:22:51【问题描述】:我有一个客户希望每天将他的子客户价格工具(超过2.000.000条记录)导入SQLServer数... 查看详情

Mono C# SQL 更新“并发冲突”

...:2009-07-1015:24:22【问题描述】:每次我尝试通过Mono中的SqlDataAdapter.Update()更新一行时,我都会得到:未处理的异常:System.Data.DBConcurrencyException:并发冲突:UpdateCommand影响了0条记录。 查看详情

如果我将列值“更改”为已经存在的值,会调用 UPDATE 吗?

...需要额外的逻辑来避免对我的SQL数据库的无用调用,或者SqlDataAdapter.Update()是否会做正确的事情。如果我有这个代码:SqlCon 查看详情

Firebase pod 更新未更新

】Firebasepod更新未更新【英文标题】:Firebasepodupdatenotupdating【发布时间】:2019-12-0108:32:19【问题描述】:Xcode版本:11.2.1Pod版本:1.8.4下面是我的pod文件:所以我运行命令podupdatepod根本没有更新以下是我的终端的详细信息:如您... 查看详情

更新电子问题:未捕获的 ReferenceError:未定义全局

】更新电子问题:未捕获的ReferenceError:未定义全局【英文标题】:UpdatingElectronissue:UncaughtReferenceError:globalisnotdefined【发布时间】:2021-12-1306:20:28【问题描述】:我正在使用ReactJS+Bootstrap和Typescript开发一个Electron应用程序,当我... 查看详情

NotifyListeners 未更新 Flutter Widget

】NotifyListeners未更新FlutterWidget【英文标题】:FlutterWidgetnotupdatedbyNotifyListeners【发布时间】:2021-12-2309:51:02【问题描述】:尽管groupValue已更新,但我有一个单选按钮未在通知侦听器上更新,单选按钮未更新。我使用多提供者。这... 查看详情

UIScrollView zoomScale 初始更新后未更新

】UIScrollViewzoomScale初始更新后未更新【英文标题】:UIScrollViewzoomScalenotupdatingafterinitialupdate【发布时间】:2019-10-1508:04:07【问题描述】:我有一个运行此代码的点击手势,它运行一次,然后停止更新zoomScale。@objcfuncsampleTapGestureTap... 查看详情

WidgetKit 未更新

】WidgetKit未更新【英文标题】:WidgetKitnotupdating【发布时间】:2020-09-3015:41:59【问题描述】:例如,我希望我的小部件每5秒更新一次。我不知道为什么它不起作用。代码应该是对的。更新代码:funcgetTimeline(forconfiguration:Configuratio... 查看详情

RCP 应用程序:“检查更新”返回“未找到更新”

】RCP应用程序:“检查更新”返回“未找到更新”【英文标题】:RCPapplication:"CheckforUpdates"returns"Noupdateswerefound"【发布时间】:2021-12-1621:58:39【问题描述】:我正在从站点更新RCP应用程序,其中包含应用程序的新... 查看详情

JpaRepository 查询参数未动态更新

】JpaRepository查询参数未动态更新【英文标题】:JpaRepositoryqueryparametersarenotgettingupdateddynamically【发布时间】:2022-01-1017:27:03【问题描述】:查询参数未更新-importorg.springframework.data.jpa.repository.JpaRepository;importorg.springframework.data. 查看详情