Использование TableAdapter для вставки строк в набор данных ничего не делает - PullRequest
1 голос
/ 21 марта 2011

У меня есть вопрос, похожий на этот , но чтение (принятого) ответа не дало мне большого понимания, поэтому я надеюсь изложить его более четко и получить более четкий ответ.

Я пытаюсь вставить строку данных в таблицу. Я использую TableAdapter пользовательский «insert nonQuery», который я написал (он работает, я тестировал), чтобы принять некоторые параметры. Я довольно новичок в этом деле общения с базой данных через .NET, и то, что я делаю, вероятно, ошибочно по своему замыслу. Мои вопросы почему это неправильно и как правильно это сделать ? И то и другое одинаково важно, ИМО.

Вот пример кода 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"

но он недостаточно чист, чтобы мне нравился мой код. Итак, есть ли способ сделать то, что я пытаюсь сделать так, как я это делаю? Другими словами, как мне использовать аккуратную структуру TableAdapter для связи с моим DataSet и поставить в него новую строку?

Заранее спасибо!

Ответы [ 2 ]

3 голосов
/ 22 марта 2011

Были две вещи, которые были неправильными:

  1. (незначительная проблема) У меня не было заполнено DataTable из TableAdapter (см. Код ниже)

  2. (серьезный, подлый вопрос) Мой метод работал с самого начала. ничего не нужно добавлять, кроме строки выше.Однако ConnectionString из arraysTableAdapter указывал моей программе (автоматически, по умолчанию) на неправильное местоположение.Как только я вручную установил 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
3 голосов
/ 21 марта 2011

Принятый ответ в вопросе, на который вы ссылаетесь, является правильным, но иногда полезно сказать это другими словами:

TableAdapter используется для связи между DataTable (в DataSet может быть один или несколько DataTables).) и база данных.Он может извлекать данные из базы данных и добавлять их в DataTable, а также отправлять данные из DataTable в базу данных.Его целью является создание и выполнение кода SQL, необходимого для работы этой коммуникации.

Вы пытаетесь использовать TableAdapter для непосредственного добавления данных в вашу DataTable.Это не будет работать.Вместо этого вы должны использовать методы, поставляемые с DataTable, чтобы добавить новую строку в DataTable, а затем (если необходимо) использовать TableAdapter для отправки этой строки в базу данных.

Например, с набором данных с именемDataSet1, который содержит DataTable с именем DataTable1, который имеет три текстовых столбца. Вы можете добавить запись, подобную этой:

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

Этот метод AddDataTable1Row автоматически создан для вас, и я думаю, это то, что вы ищете.

...