vb. net обновить каждую строку с указанным c значением - PullRequest
0 голосов
/ 06 августа 2020

Я хочу построить al oop в vb. net, который обновит цену в базе данных. Конечная цель - создать API, который берет цену и вставляет в базу данных, где ID - динамическое c

Сегодняшняя цель - создать все oop, которые вставляют 1 в таблицу «цена», где ID - 1 - 4 Но я хочу, чтобы цена была динамичной. Но когда я нажимаю кнопку, отображается правильный синтаксис, но он не обновляется.

Можете ли вы дать мне советы или рекомендации, чтобы помочь мне. Я что-то прочитал с помощью DataAdapter, но понятия не имею.

Код:

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

        pgConnectionString = "Server=127.0.0.1;Port=5432;Database=magic;User Id=magic;Password=magic;"      'PostgreSQL connection'
        pgConnection.ConnectionString = pgConnectionString
        pgCommand.Connection = pgConnection
        pgCommand.CommandType = CommandType.Text
        Dim apiid As Integer

        apiid = 1

        Do While apiid <= 4
            pgConnection.Open()
            pgCommand.CommandText = "update magic set price = 1 where ID=" & apiid & ""
            pgConnection.Close()
            MessageBox.Show(pgCommand.CommandText)
            apiid += 1
        Loop

End Sub

Ответы [ 2 ]

0 голосов
/ 07 августа 2020

Возможно, лучше не смешивать код пользовательского интерфейса с кодом базы данных.

Я создал класс для данных о ценах.

Public Class NewPrice
    Public Price As Double
    Public ID As Integer
    Public Sub New(p As Double, i As Integer)
        Price = p
        ID = i
    End Sub
End Class

Код базы данных может выглядеть как следующий. Соединения должны создаваться и удаляться в том методе, в котором они используются. Блок Using...End Using гарантирует, что ваши объекты базы данных закрыты и удалены. Конструктор соединения может принимать строку соединения в качестве аргумента; аналогично команда может принимать в качестве аргументов оператор sql и соединение.

Перед l oop мы создаем соединение и команду, и соединение открывается. Только значения параметров меняются внутри l oop

Private ConStr As String = "Server=127.0.0.1;Port=5432;Database=magic;User Id=magic;Password=magic;"

Public Sub UpdateMagicPrice(PriceList As List(Of NewPrice))
    Using cn As New NpgsqlConnection(ConStr),
            cmd As New NpgsqlCommand("update magic set price = @Price where ID= @ID", cn)
        cn.Open()
        For Each np In PriceList
            cmd.Parameters.Add("@Price", NpgsqlDbType.Double).Value = np.Price
            cmd.Parameters.Add("@ID", NpgsqlDbType.Integer).Value = np.ID
            cmd.ExecuteNonQuery()
        Next
    End Using
End Sub

В коде пользовательского интерфейса мы создаем список ваших данных.

Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
    Dim p As Double = 13.95
    Dim lst As New List(Of NewPrice)
    For i = 1 To 4
        lst.Add(New NewPrice(p, i))
    Next
    UpdateMagicPrice(lst)
End Sub

Надеюсь, это поможет вам начать к своей цели.

0 голосов
/ 07 августа 2020

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

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

    pgConnectionString = "Server=127.0.0.1;Port=5432;Database=magic;User Id=magic;Password=magic;"      'PostgreSQL connection'
    pgConnection.ConnectionString = pgConnectionString
    pgCommand.Connection = pgConnection
    pgCommand.CommandType = CommandType.Text
    Dim apiid As Integer

    apiid = 1

    Do While apiid <= 4
        pgConnection.Open()
        pgCommand.CommandText = "update magic set price = 1 where ID=" & apiid & ""

        pgCommand.ExecteNonQuery() 'As per comments above

        pgConnection.Close()
        MessageBox.Show(pgCommand.CommandText)
        apiid += 1
    Loop
End Sub

Другие вещи, которые вы захотите рассмотреть, - это как объекты соединения, так и объекты команд, реализующие IDisposable, поэтому операторы Using были бы хорошей идеей для обработки состояния соединения и сборщики мусора для вас. Далее вы захотите прочитать об использовании параметров. Это позволит вам сохранить динамику цены c в соответствии с вашими начальными требованиями, она намного менее подвержена ошибкам и, наконец, вводит элемент безопасности для защиты целостности вашей БД (SQL инъекции)

...