【问题标题】:Why is my DataTable not being updated?为什么我的 DataTable 没有更新?
【发布时间】:2014-02-03 22:44:44
【问题描述】:

我有以下完美执行的代码,但 DataTable 没有得到更新......我错过了什么/做错了什么?!?

Option Compare Text
Option Explicit On

Imports System
Imports System.IO
Imports System.Data
Imports System.Data.SqlClient
Imports System.Windows
Imports System.Windows.Forms
Imports Microsoft.Office
Imports Microsoft.Office.Interop

Public Class Form1
Public txtTo As String = ""
Public txtFrom As String = ""
Public txtSubject As String = ""
Public txtBody As String = ""
Public txtAttachmentID As String = ""
Public txtAttachment As String = ""
Public MsgBoxResult As DialogResult
Public myPath As String = ""
Public dbLeague As String = ""
Public dbSession As String = "3" 
Public Sqlstring As String = ""
Public myText As String
Public newLocationRow As KickaboutEmailDataSet.FileLocationsRow

Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load

    Me.LeaguesTableAdapter1.Fill(Me.KickaboutEmailDataSet1.Leagues)

    ComboBox1.SelectedIndex = -1
    ComboBox2.SelectedIndex = 0

End Sub

Private Sub Button3_Click(sender As System.Object, e As System.EventArgs) Handles Button3.Click

    Dim folderBrowserDialog As New FolderBrowserDialog()

    myPath = Environment.SpecialFolder.MyComputer

    Me.FileLocationsTableAdapter1.Fill(Me.KickaboutEmailDataSet1.FileLocations)

    If File.Exists(myPath & "\Despatch Schedule.txt") Then
        myText = ""
    Else
        myText = "to be "
    End If

    For Each Dr As DataRow In KickaboutEmailDataSet1.FileLocations.Rows
        myPath = Dr.Item(1).ToString
    Next

    folderBrowserDialog.Description = "Select Folder Where Despatch Schedule File is " & myText & "Stored"
    folderBrowserDialog.RootFolder = myPath
    folderBrowserDialog.ShowNewFolderButton = True

    If folderBrowserDialog.ShowDialog() = Windows.Forms.DialogResult.OK Then
        myPath = folderBrowserDialog.SelectedPath
    Else
        Exit Sub
    End If

我已经使用 MSDN 作为指导编写了接下来的四行,正如我所说,它们执行得很好,但是数据库没有得到更新

    newLocationRow = KickaboutEmailDataSet1.FileLocations.NewFileLocationsRow()
    newLocationRow.ID = 0
    newLocationRow.DESPATCHSCHEDULE = myPath
    KickaboutEmailDataSet1.FileLocations.Rows.Add(newLocationRow)

End Sub

End Class

【问题讨论】:

  • 首先您说DataTable 没有更新,然后您说数据库没有更新。它们是两个不同的东西,你是什么意思?如果您期望向 DataTable 添加一行会自动向数据库添加一条记录,那么您必须修改您的期望。 DataTable 只是一个本地缓存。要保存对数据库的更改,您必须在表适配器上调用 Update。
  • 我了解数据库包含 DataTables,并且我意识到在数据实际写入/提交到 DataTable 之前,数据库不会更新,但我会认为当 MSDN 告诉我如何向数据表添加新行,他们会给你所有必要的信息,但我显然遗漏了一些东西,因此我的问题。
  • 不,数据库不包含 DataTables。它包含表格。 MSDN 向您展示了如何向 DataTable 添加行,而这正是您所做的。如果您希望在数据库中的相应表中插入相应的行,那么您必须将来自 DataTable(它是一个 .NET 对象而不是数据库的一部分)的更改保存回数据库。正如您已经被告知的那样,您可以通过在数据/表适配器上调用 Update 来做到这一点。

标签: sql-server vb.net visual-studio-2010


【解决方案1】:

只需创建一个 DataAdapter 实例(如果您使用的是 Sql Server,则为 SqlDataAdapter)并调用 Update ...也许您已经有了一个可用的 DataAdapter,因为您似乎正在使用类型化数据集...

【讨论】:

  • 我现在很困惑我是否有一个 Typed 或 UnTyped 数据集:-( !!! 我昨天假设,在 MSDN 页面上查看这个时,我确实有一个 Typed 数据集,但是今天早上一直在阅读此页面...sourcecodematrix.wordpress.com/2013/02/26/… ...这看起来很简单,我的解决方案资源管理器中有一个 XSD 数据集,所以我有一个无类型数据集吗?!?我的解决方案资源管理器:KAemail MyProject 应用程序。 config ClassDiagram1.cd Form1.vb KickaboutEmail.vb KickaboutEmailDataset.xsd Settings.vb
  • 类型化数据集是从您的 xsd 文件生成的...如果您在解决方案资源管理器中展开 KickaboutEmailDataset.xsd 节点,您可以看到生成的类
  • 我正在使用 VS2013 Express 和 Sql-Server 2013 Express 从头开始​​,看看我是否能更好地理解它。感谢您的帮助,我很可能会在新项目中使用代码的基础,所以我希望它在我了解更多时能派上用场!!!我确实认为我必须找到其他 MSDN 的演练,如果你知道自己在做什么,它们可能会很好,但对于学习者来说,它们太糟糕了!!!
猜你喜欢
  • 2018-03-21
  • 2011-10-10
  • 2018-03-13
  • 2016-07-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-24
  • 2017-11-13
相关资源
最近更新 更多