SQL Сервер Удалить / Вставить на основе текстового поля не может работать. - VS 2010 - PullRequest
0 голосов
/ 11 марта 2020

Моя программа VS 2010 имеет Datagridview, который загружает данные из SQL серверной базы данных, и теперь я добавляю несколько текстовых полей для добавления новых строк и обновления существующих строк.

Вот подпункт для кнопки :

Imports System.Configuration
Imports System.Data
Imports System.Data.SqlClient
Imports System.Data.SqlTypes
Imports System.IO


Public Class macmaster

'variables to be used'  
Dim myCmd As SqlCommand         'create SQL command'
Dim myReader As SqlDataReader   'pull data'
Dim dt As New DataTable         'store data'
Dim intResult As MsgBoxResult
Dim strSQL As String

 Private Sub MacSave_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MacSave.Click

    Dim myConn = New SqlConnection("server=server;database=SQL;uid=pro;pwd=abcd") 'form connection'

    Try 'alert user if any fields not filled in'

        If Me.MacNm.Text.Trim = "" Then

            '**this portion of code not relevant**'

        Else 'proceed next step if all fields ok.'

            intResult = MsgBox("Are you sure to Add/Update?", MsgBoxStyle.OkCancel)
            If intResult = MsgBoxResult.Ok Then

                'call connection (myConn)'
                myConn.Open()

                myCmd.CommandText = "DELETE FROM [SQL].[dbo].[Mac] WHERE Machine='" & MacNm.Text & "'"

                myCmd.CommandText = "INSERT INTO [SQL].[dbo].[Mac](Machine, PIC, Die) VALUES('" & MacNm.Text & "','" & MacPIC.Text & "','" & MacDie.Text & "')"

                MsgBox("Record Added!")

                myConn.Close()

            End If

        End If

    Catch ex As Exception
        MsgBox(ex.Message, MsgBoxStyle.Critical, "btnAdd_Click Exception")
    End Try

End Sub
End Class

Во время тестирования я опробовал кнопку. Код работает до тех пор, пока я не получу окно с сообщением о добавлении записи.

Но, проверяя серверную базу данных SQL, я вижу, что данные даже не изменились. Ни один из 2 запросов SQL не сработал. Я даже протестировал оба запроса на сервере SQL. Работает отлично. Это то, как я обращаюсь к текстовому полю с проблемами?

Ответы [ 2 ]

2 голосов
/ 11 марта 2020

Вам не хватает ExecuteNonQuery ().

myCmd = New SqlCommand()

myCmd.Connection= myConn

mnyCmd.CommandType= CommandType.Text

Dim commands As String
commands= "DELETE FROM [SQL].[dbo].[Mac] WHERE Machine='" & MacNm.Text & "';"&"INSERT INTO [SQL].[dbo].[Mac](Machine, PIC, Die) VALUES('" & MacNm.Text & "','" & MacPIC.Text & "','" & MacDie.Text & "')"

myCmd.CommandText = commands

myCmd.ExecuteNonQuery()

MsgBox("Record Added!")
1 голос
/ 11 марта 2020

Вы делаете это совершенно неправильно. Что вы должны сделать:

  1. Используйте адаптер данных, чтобы заполнить DataTable, вызвав Fill.
  2. Привязать DataTable к BindingSource.
  3. Свяжите BindingSource с DataGridView, а также с TextBoxes.
  4. Добавляйте и удаляйте строки через BindingSource и редактируйте строки напрямую.
  5. Сохранить все изменения обратно в базу данных за один go путем вызова Update на адаптере данных и передачи DataTable.

. Вы добавите BindingSource к форме в конструкторе , Тогда привязка данных будет выглядеть примерно так:

myBindingSource.DataSource = myDataTable
myDataGridView.DataSource = myBindingSource
myTextBox.DataBindings.Add("Text", myBindingSource, "Column1")

При выборе строки в сетке Textboxes заполнится значениями поля для этой строки. Затем вы можете отредактировать в отдельных элементах управления и зафиксировать изменение неявным образом, перейдя к другой строке или явно, вызвав EndEdit на BindingSource. Чтобы удалить выбранную строку, наберите RemoveCurrent на BindingSource. Чтобы добавить новую строку, позвоните AddNew на BindingSource. Я не проверял, но я считаю, что эта новая строка сразу доступна через TextBoxes. Опять же, внесите изменения неявно или явно. В случае, если это не очевидно, BindingSource предназначен для работы со связанными данными.

Если это еще не ясно, все эти изменения вносятся локально, только в DataTable. База данных обновляется при вызове Update на адаптере данных. Вам нужно будет либо использовать построитель команд, либо создать InsertCommand, UpdateCommand и DeleteCommand самостоятельно.

...