1

我有一个与此类似的问题,但阅读(接受的)答案并没有给我太多的见解,所以我希望更清楚地说明它并得到更清晰的回复。

我正在尝试将数据行插入表中。我正在使用TableAdapter我编写的自定义“插入非查询”(它有效,我测试过)来接受一些参数。我对通过 .NET 与数据库进行通信的业务相当陌生,而我所做的可能是设计错误的。我的问题是为什么它是错误的,正确的方法是什么?两者同样重要,IMO。

这是我编写的一些示例 VB 代码:

Dim arraysTableAdapter As New UnitTestsDataSetTableAdapters.ArraysTableAdapter

Try
    arraysTableAdapter.InsertArray("Test Array", 2, 1, 2, "Test user")
Catch ex As SqlException
    MsgBox("Error occured when trying to add new array." _
          & vbNewLine & vbNewLine _
          & ex.Message)
End Try

……差不多就是这样。没有引发异常,我的表没有插入新行。一切都是我调用该方法之前的样子InsertArray。当我在 QueryBuilder 中使用相同的参数测试我的查询时,会在数据库中添加一个新行。

现在,我确实了解这行不通的一些原因。我知道我需要在我的DataSet(不知道怎么做)中创建并选择一行,以便告诉TableAdapter它正在向什么添加数据。或者至少我从阅读大量论坛中获得了这种印象。

我真的很想TableAdapter在某个时候使用,因为它知道.InsertArray存在并且它知道它喜欢哪些参数。我可以尝试使用

    Dim con As New SqlConnection
    Dim cmd As New SqlCommand

    con.ConnectionString = connString
    con.Open()

    cmd.CommandText = "INSERT ...... all that jazz"

但对于我喜欢我的代码的干净程度来说,它还不够干净。那么,有什么方法可以按照我的方式做我想做的事情吗?换句话说,我如何使用 a 的简洁结构TableAdapter与 my 通信DataSet并在其中放入新行?

提前致谢!

4

2 回答 2

4

有两件事是错误的:

  1. (小问题)我没有DataTable填写TableAdapter(见下面的代码)

  2. (主要的,偷偷摸摸的问题)我的方法从一开始就奏效了。除了上面的那行之外,没有什么要添加的。但是,ConnectionStringofarraysTableAdapter将我的程序(默认情况下自动)指向错误的位置。一旦我手动设置ConnectionString,它就可以完美运行。

这是我的完整代码:

    Dim connString As String = "Some correct connection string"
    Dim arraysDataTable As New SpeakerTestsDataSet.ArraysDataTable

    Dim arraysTableAdapter As New UnitTestsDataSetTableAdapters.ArraysTableAdapter

    'Set the correct connection string'
    arraysTableAdapter.Connection.ConnectionString = conn 

    'Fill table from the adapter'
    arraysTableAdapter.Fill(arraysDataTable)

    Try
        arraysTableAdapter.Insert("Test", 2, 1, 2, Now, Now, "Me")
    Catch ex As Exception
        MsgBox("Error occured when trying to add new array." _
              & vbNewLine & vbNewLine _
              & ex.Message)
    End Try
于 2011-03-21T21:34:47.873 回答
3

您链接到的问题中接受的答案是正确的,但有时用不同的词说出来会有所帮助:

TableAdapter 用于在 DataTable(DataSet 中可以有一个或多个 DataTable)和数据库之间进行通信。它可以从数据库中提取数据并将其添加到 DataTable 中,并且可以将 DataTable 中的数据发送到数据库。它的目的是创建和执行使这种通信工作所需的 SQL 代码。

您正在尝试使用 TableAdapter 直接将数据添加到您的 DataTable。这行不通。相反,您应该使用 DataTable 附带的方法向 DataTable 添加新行,然后(如有必要)使用 TableAdapter 将该行发送到数据库。

例如,对于一个名为 DataSet1 的数据集,其中包含一个名为 DataTable1 的数据表,该数据表具有三个文本列,您可以添加如下记录:

    Dim d As New DataSet1
    d.DataTable1.AddDataTable1Row("value1", "value2", "value3")

AddDataTable1Row 方法是自动为您创建的,我认为这就是您正在寻找的。

于 2011-03-21T20:06:58.673 回答